新浪博客

顺序栈的操作实现及总结

2016-03-26 12:52阅读:
#define _CRT_SECURE_NO_DEPRECATE//解决CRT函数安全增强的问题
#include
#include
#include
#define StackSize 100
typedef int ElemType; //采用这种方式更方便修改代码
typedef struct{ //定义顺序栈的数据类型
ElemType data[StackSize];
int top;
}Sq_Stack;
int Init_Push_Stack(Sq_Stack* &Q) //构造一个空的顺序栈并初始化
{
int i;
int n;
Q = (Sq_Stack*)malloc(sizeof(Sq_Stack));
if (!Q->data)
printf('Overflow');
Q->top = -1;
printf('请输入入栈元素的个数:');
scanf('%d', &n);
if (n == 0)
return 0;
if (n > StackSize)
printf('OverFlow!');
for (i = 0; i < n; i++)
{
printf('请输入入栈的元素:');
Q->top++;
scanf('%d', &Q->data[i]);
}
printf('顺序栈的长度为:%d', Q->top + 1);
return 0;
}
void Pop_Stack(Sq_Stack* &Q) //顺序栈的出栈
{
int n;
int i;
if (Q->top == -1)
printf('ERROR');
printf('请输入出栈元素的个数:');
scanf('%d', &n);
if (Q->top + 1 <
n)
printf('ERROR');
printf('依次出栈的元素为:');
for (i = 1; i <= n;i++)
{
printf('%d', Q->data[Q->top]);
Q->top--;
}
}
void DispStack(Sq_Stack* &Q) //从栈顶到栈底顺序显示所有元素
{
int i;
for (i = Q->top; i >= 0; i--)
{
printf('%d', Q->data[i]);
}
printf('');
}
void Destroy_Satck(Sq_Stack* &Q) //销毁顺序栈
{
free(Q);
Q->top = -1;
}
int main()
{
Sq_Stack* Q;
int i;
while (1)
{
printf('********************'); //主界面函数,也可以单写出来,但是影响不大
printf('1.顺序栈的创建:');
printf('2.顺序栈的出栈: ');
printf('3.销毁此顺序栈: ');
printf('4.显示栈顶到栈底:');
printf('5.结束程序');
printf('********************');
printf('请输入您的选择: ');
scanf('%d', &i);
switch (i)
{
case 1:printf('***顺序栈的创建:***');
Init_Push_Stack(Q);
break;
case 2:printf('***顺序栈的出栈:***');
Pop_Stack(Q);
break;
case 3:printf('***销毁此顺序栈:***');
Destroy_Satck(Q);
break;
case 4: printf('***显示栈顶到栈底:***');
DispStack(Q);
break;
case 5:return 0;
}
}
return 0;
} 顺序栈的操作实现及总结
顺序栈的操作实现及总结
1.注重界面函数的设置,switch和case语句; 2.指针的艺术:指针就是一个特殊的变量,只不过它的内容是别人的地址,而指针的名字又代表着自己的地址。用malloc初始化指针,由于指针还指向一个Sq_Stack类型的数据。所以借助指针把数据也给初始化,即 初始化一个空栈;
3.着重理解算法和函数的区别,这点很重要;
4.Visual Studio 2012 编译错误【error C4996: 'scanf': This function or variable may be unsafe. 】的解 决方案:
(1): 将原来的旧函数替换成新的 Security CRT functions,例如 scanf变为scanf_s;
(2):在预编译头文件stdafx.h里(注意:一定要在没有include任何头文件之前)定义下面的宏:


#define _CRT_SECURE_NO_DEPRECATE


我的更多文章

下载客户端阅读体验更佳

APP专享