一.先说顺序栈
- /**********************************************************
- 顺序栈的各种操作13-5-1.cpp
- 1.初始化栈
- 2.判断栈空
- 3.入栈
- 4.出栈
- 5.取栈顶元素
- 6.主函数测试以上功能
- ***********************************************************/
- #include<stdio.h>
- #include<stdlib.h>
- #define MAX 1000
- typedef struct
- {
- int data[MAX];
- int top;
- }SeStack;
- void InitStack(SeStack *S)
- {
- S->top=-1;
- }
- int EmptyStack(SeStack *S)
- {
- return ((S->top==-1)?1:0);
- }
- int Push(SeStack *S, int x)
- {
- if(S->top==MAX-1)
- {
- printf("栈满!\n");
- return 0;
- }
- S->data[++S->top]=x;
- return 1;
- }
- int Pop(SeStack *S, int *x)
- {
- if(EmptyStack(S))
- {
- printf("栈空!\n");
- return 0;
- }
- *x=S->data[S->top--];
- return 1;
- }
- int GetTop(SeStack *S, int *x)
- {
- if(EmptyStack(S))
- {
- printf("栈空!\n");
- return 0;
- }
- *x=S->data[S->top];
- return 1;
- }
- int main()
- {
- SeStack *S=(SeStack *)malloc(sizeof(SeStack));
- int n, x, fx, j;
- InitStack(S);
- printf("输入入栈元素个数:\n");
- scanf("%d",&n);
- for(int i=1; i<=n; i++)
- {
- Push(S, i);
- }
- GetTop(S, &fx);
- printf("栈顶元素:%d\n", fx);
- printf("栈中元素:\n");
- for(j=S->top; j>-1; j--)
- {
- printf("%3d",S->data[j]);
- }
- for(int i=1; i<=n; i++)
- {
- Pop(S, &x);
- printf("\n出栈元素为:%d\n", x);
- }
- system("pause");
- return 0;
- }
二.再说链栈
- /**********************************************************
- 链栈的各种操作13-5-2.cpp和13-5-3.cpp
- 1.初始化栈
- 2.判断栈空
- 3.入栈
- 4.出栈
- 5.取栈顶元素
- 6.主函数测试以上功能
- ***********************************************************/
- #include<stdio.h>
- #include<stdlib.h>
- typedef struct Lnode
- {
- int data;
- struct Lnode *next;
- }LinkList;
- typedef LinkList LinkStack;
- void InitStack(LinkStack *top)
- {
- /*
- top=(LinkStack *)malloc(sizeof(LinkStack));//(1)
- if(top==NULL)
- {
- printf("分配空间失败!\n");
- return 0;
- }
- */
- //printf("(InitStack)top addr:%x\n", top);
- top->next=NULL;
- //return 1;
- }
- int EmptyStack(LinkStack *top)
- {
- return ((top->next==NULL)?1:0);
- }
- int Push(LinkStack *top, int x)
- {
- LinkStack *s=(LinkStack *)malloc(sizeof(LinkStack));
- if(s==NULL)
- {
- printf("分配空间失败!\n");
- return 0;
- }
- s->data=x;
- s->next=top->next;
- top->next=s;
- //printf("(Push)top addr:%x\n", top);
- return 1;
- }
- int Pop(LinkStack *top, int *x)
- {
- LinkStack *p;
- if(EmptyStack(top))
- {
- printf("栈空!\n");
- return 0;
- }
- *x=top->next->data;
- p=top->next;
- top->next=p->next;
- //printf("(Pop)top addr:%x\n", top);
- free(p);
- return 1;
- }
- int GetTop(LinkStack *top, int *x)
- {
- if(EmptyStack(top))
- {
- printf("栈空!\n");
- return 0;
- }
- *x=top->next->data;
- return 1;
- }
- int main()
- {
- LinkStack *top=(LinkStack *)malloc(sizeof(LinkStack));
- //printf("(main)top addr:%x\n", top);
- LinkStack *p;
- int n, x, fx;
- InitStack(top);
- printf("输入入栈元素个数n:\n");
- scanf("%d", &n);
- for(int i=1; i<=n; i++)
- {
- Push(top, i);
- }
- GetTop(top, &fx);
- printf("栈顶元素:%d\n", fx);
- printf("栈中元素:\n");
- for(p=top->next; p!=NULL; p=p->next)//(2)
- {
- printf("%3d", p->data);
- }
- for(int i=1; i<=n; i++)
- {
- Pop(top, &x);
- printf("\n出栈元素为:%d\n", x);
- }
- system("pause");
- return 0;
- }
-