#include <stdio.h>
#include <stdlib.h>
typedef int elemType;
struct stack{
elemType date;
struct stack *next;
};
void initStack(struct stack* *s)
{
*s = NULL;
return ;
}
void push(struct stack* *s,elemType x)
{
struct stack *newP;
newP = malloc(sizeof(struct stack));
if(newP == NULL)
{
printf("内在空间分配失败!");
exit(1);
}
newP->date = x;
newP->next = *s;
*s = newP;
return ;
}
elemType pop(struct stack* *s)
{
struct stack *p;
elemType temp;
if(*s == NULL)
{
printf("栈空无法删除!");
exit(1);
}
p = *s;
*s = p->next;
temp = p->date;
free(p);
return temp;
}
elemType peek(struct stack* *s)
{
if(*s == NULL)
{
printf("空栈,退出!");
exit(1);
}
return (*s)->date;
}
int emptyStack(struct stack* *s)
{
if(*s == NULL)
{
return 1;
}
else
return 0;
}
void clearStack(struct stack* *s)
{
struct stack *cp,*np;
cp = *s;
while(cp != NULL){
np = cp->next;
free(cp);
cp = np;
}
*s = NULL;
return ;
}
void traverse(struct stack* *s)
{
int i = 0;
struct stack *p;
p = *s;
printf("从栈顶依次输出:");
while(p!=NULL)
{
printf("%d ",p->date);
p = p->next;
}
return ;
}
void main()
{
elemType x = 0;
int ms = 0,i = 0;
struct stack *s;
while(1)
{
printf("1->初始化顺序栈\n");
printf("2->增加顺序栈\n");
printf("3->删除顺序栈\n");
printf("4->判断顺序栈\n");
printf("5->清除顺序栈\n");
printf("6->遍历顺序栈\n");
printf("清选择操作:");
scanf("%d",&i);
switch(i)
{
case 1:
printf("初始化栈链表:");
initStack(&s);
break;
case 2:
printf("请输入入栈元素x:");
scanf("%d",&x);
push(&s,x);
break;
case 3:
printf("出栈元素为%d",pop(&s));
getchar();
getchar();
break;
case 4:
if(emptyStack(&s))
{
printf("栈表非空!");
getchar();
getchar();
break;
}
else
printf("栈表为空!");
getchar();
getchar();
break;
case 5:
clearStack(&s);
printf("栈表销毁成功!");
getchar();
getchar();
break;
case 6:
traverse(&s);
getchar();
getchar();
break;
}
system("cls");
}
}