链式栈:
#include <stdio.h>
#include <stdlib.h>
typedef int datatype;
typedef struct node
{
datatype data;
struct node *next;
}liststack;
liststack *top;
void setnull(liststack *ltop);
liststack *push(liststack *ltop,int x);
liststack *pop(liststack *ltop,int *x);
int main()
{
int sel=0;
int ret=0;
int num=0;
setnull(top);
while(1)
{
printf("链式栈操作如下所示:\n");
printf("\t1:压栈\n\t2:出栈\n\t3:退出\n");
printf("请输入选择:\n");
scanf("%d",&sel);
switch(sel)
{
case 1:
printf("请输入压栈数据:\n");
scanf("%d",&num);
top=push(top,num);
if(NULL==top)
{
printf("压栈错误\n");
}
else
{
printf("压栈正确\n");
}
break;
case 2:
top = pop(top,&ret);
if(NULL==top)
{
printf("出栈错误\n");
}
else
{
printf("出栈数据:%d\n",ret);
}
break;
case 3:
exit(0);
break;
default:
printf("请输入正确选项\n");
break;
}
}
return 0;
}
void setnull(liststack *ltop)
{
ltop=NULL;
}
liststack *push(liststack *ltop,int x)
{
liststack *q=NULL;
q = (liststack *)malloc(sizeof(liststack));
if(NULL==q)
{
return NULL;
}
q->data=x;
q->next=ltop;
ltop=q;
return ltop;
}
liststack *pop(liststack *ltop,int *x)
{
if(NULL==ltop)
{
printf("underflow\n");
return NULL;
}
liststack *p=NULL;
*x=ltop->data;
p = ltop;
ltop=ltop->next;
free(p);
return ltop;
}
顺序栈:
#include <stdio.h>
#include <stdlib.h>
#define maxsize 5
typedef int datatype;
typedef struct
{
datatype data[maxsize];
datatype top;
}seqstack;
void setnull(seqstack *ls);
int empty(seqstack *ls);
int push(seqstack *ls,int x);
int pop(seqstack *ls);
int top(seqstack *ls);
int main()
{
int sel=0;
int num=0;
int ret=0;
seqstack *s=NULL;
s = (seqstack *)malloc(sizeof(seqstack));
setnull(s);
while(1)
{
printf("顺序栈操作如下所示:\n");
printf("\t1:压栈\n\t2:出栈\n\t3:取栈顶数据\n\t4:退出\n");
printf("请输入选项:");
scanf("%d",&sel);
getchar();
switch(sel)
{
case 1:
printf("请输入压栈数据:\n");
scanf("%d",&num);
ret=push(s,num);
if(ret==0)
{
printf("压栈错误\n");
}
else
{
printf("压栈正确\n");
}
break;
case 2:
ret = pop(s);
if(ret==0)
{
printf("出栈错误\n");
}
else
{
printf("出栈元素是:%d\n",ret);
}
break;
case 3:
ret = top(s);
if(ret==0)
{
printf("取栈顶元素错误\n");
}
else
{
printf("取栈顶元素是:%d\n",ret);
}
break;
case 4:
exit(0);
break;
default:
printf("请选择正确的数据\n");
break;
}
}
return 0;
}
void setnull(seqstack *ls)
{
ls->top=-1;
}
int empty(seqstack *ls)
{
int ret=0;
ret = (ls->top>=0)?0:1;
return ret;
}
int push(seqstack *ls,int x)
{
printf("push top:%d\n",ls->top);
if(ls->top == maxsize-1)
{
printf("overflow\n");
return 0;
}
ls->top++;
ls->data[ls->top]=x;
return 1;
}
int pop(seqstack *ls)
{
printf("pop top:%d\n",ls->top);
if(empty(ls))
{
printf("underflow\n");
return 0;
}
int num=0;
num=ls->data[ls->top];
ls->top--;
return num;
}
int top(seqstack *ls)
{
if(empty(ls))
{
printf("underflow\n");
return 0;
}
int num=0;
num=ls->data[ls->top];
return num;
}