首先说一下在顺序栈中,我个人觉得几个比较关键的地方:
- 顺序栈的初始化
- 栈中元素的表示法(数组+指针)
下面就直接放上代码,如以前一样,代码没有经过二次加工,适合参考与修改。
****************************************************************************************************************************************
代码如下:
#include <stdio.h>
#include <stdlib.h>
#define TRUE 1
#define FALSE 0
#define MAXSIZE 10
typedef int Status;
typedef int ElemType;
typedef struct node
{
ElemType data[MAXSIZE];
ElemType top;
}Stack;
void InitStack(Stack *s) //初始化,可以和链栈中的初始化结合分析理解
{
s->top = -1;
}
Status Push(Stack *s,ElemType e) //入栈
{
if(s->top == MAXSIZE-1)
{
return FALSE;
}
s->top++; //在数据入栈前,首先将顶指针上移,指向0
s->data[s->top] = e;
return TRUE;
}
Status Pop(Stack *s,ElemType *e) //出栈
{
if(s->top == -1) //判断栈是否为空
{
printf("栈为空!\n");
return FALSE;
}
while(s->top!=-1) /*循环全部出栈,如果想要自己判断出几个数据,可以省去这里的循环,再在主函数中添加一个循环即可*/
{
*e = s->data[s->top];
printf("%d出栈\n",s->data[s->top]);
s->top--;
}
return TRUE;
}
Status TopStack(Stack *s,ElemType *e) //栈首元素
{
*e=s->data[s->top];
return TRUE;
}
Status main()
{
Stack *s,stack;
s=&stack;
ElemType e=0,i;
InitStack(s);
printf("初始化完成!\n");
system("pause");
printf("\n");
for(i=1;i<=10;i++)
{
Push(s,i);
printf("%d进栈\n",i);
}
system("pause");
printf("\n");
Pop(s,&e);
system("pause");
printf("\n");
TopStack(s,&e);
printf("栈顶元素为:%d",e);
}
这里就不再分析了,
如果有不懂的地方,可以在文章开头有关"链栈"的那一篇文章中查找思路与解析(大体上思路是一致的);
****************************************************************************************************************************************
最快的脚步不是跨越,而是继续,最慢的步伐不是小步,而是徘徊。
****************************************************************************************************************************************