赞
踩
- #include <stdio.h>
- typedef char ElemType;
- #define StackSize 100//顺序栈的初始分配空间
- typedef struct
- {
- ElemType data[StackSize];//保存栈中元素 ,用数组存放数据,最大为StackSize,作为栈满条件
- int top;//栈顶指针
- } SqStack;
- //顺序栈的初始化
- void InitStack(SqStack* s)
- {
- s->top = -1;//将栈顶指针置为-1,即将栈作为还是空的时候
- }
- //顺序栈的进栈操作
- int Push(SqStack* s, ElemType*x)
- {
- if (s->top == StackSize - 1)//当指针指向最后一个元素时为StackSize-1,此时栈满
- {
- return 0;
- }
- else
- {
- s->top++;//栈顶指针+1指向一个新的顶部空间
- s->data[s->top] = x; //将现在指向的这个新的空的栈顶空间元素置为指定元素(后进先出)
- return 1;
- }
- }
- // 出栈操作
- int Pop(SqStack*st, ElemType*x) //出栈运算
- {
- if (st->top == -1) //当栈顶指针指向-1,说明栈空,则无法出栈
- return 0;
- else//栈不空
- {
- *x = st->data[st->top]; //将当前栈顶元素的指针赋给可供返回查看的x
- st->top--;//栈顶元素出栈后,栈顶指针向下走一格,表示新的栈顶元素
- return 1;
- }
- }
- //顺序读栈顶操作
- int GetTop(SqStack st, ElemType*x)
- {
- if (st.top == -1) //当栈顶指针指向-1,说明栈空,栈顶元素为空
- {
- return 0;
- }
- else//当栈非空的时候,则将栈顶元素赋值给可供返回查看的x,但是栈顶元素并不出栈
- {
- *x = st.data[st.top];
- return 1;
- }
- }
- //判断栈空
- int StackEmpty(SqStack st)
- {
- if (st.top == -1)//如果此时栈顶指针为-1表示栈此时为空,非-1则表示非空
- {
- return 1;
- }
- else
- {
- return 0;
- }
- }
- //遍历打印顺序栈
- int printStack(SqStack S)
- {
- if (S.top == -1)//当栈顶指针指向-1,说明栈空,无栈元素可供打印
- {
- return 0;
- }
- int i = 0; //计数器,记录当前是第几个元素
- while (S.top!= -1)
- {
- i++; //栈顶指针还未到-1,则说明当前栈顶指针有元素,计数器+1
- printf("栈顶向下第%d个元素为:%c\n", i, S.data[S.top]); //当前栈顶指针的元素打印出
- S.top--; //栈顶指针向下走一格,继续进行循环打印
- }
- return 1;
- }
- int main()
- {
- SqStack st;
- ElemType e;
- InitStack(&st);
- printf("栈%s\n", (StackEmpty(st) == 1 ? "空" : "不空"));
- printf("a进栈\n"); Push(&st, 'a');
- printf("b进栈\n"); Push(&st, 'b');
- printf("c进栈\n"); Push(&st, 'c');
- printf("d进栈\n"); Push(&st, 'd');
- printf("栈%s\n", (StackEmpty(st) == 1 ? "空" : "不空"));
- GetTop(st,&e);
- printf("栈顶元素:%c\n",e);
- printf("出栈次序:");
- printStack(st);
- printf("判断栈是否为空?\n");
- printf("栈%s\n", (StackEmpty(st) == 1 ? "空" : "不空"));
- printf("进行清栈操作!\n");
- InitStack(&st);
- printf("栈%s\n", (StackEmpty(st) == 1 ? "空" : "不空"));
- return 0;
- }
-

解释都已经放到注释里,应该比较清楚了。如有不懂欢迎留言!
小伙伴看的时候一定要注意指针是否是取的地址,博主弄这时差点废了,哈哈。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。