C语言链式栈和顺序栈的实现
来源:互联网 发布:对号入座的网络词 编辑:程序博客网 时间:2024/05/02 01:37
链式栈:
#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;
}
- C语言链式栈和顺序栈的实现
- C实现顺序栈和链式栈
- C语言链式栈的操作和实现
- 用c语言实现的链式栈
- 链式栈的C语言实现
- C语言反向链式栈的实现
- C语言实现的一个链式栈
- 栈的链式实现(C语言)
- 栈的链式存储实现c语言
- C语言实现链式栈
- C语言实现链式队列和顺序队列
- 栈的顺序存储实现和链式存储实现
- C++栈的顺序存储和链式存储的实现
- c++顺序栈和链式栈的实现
- C++ 顺序栈和链式栈的实现
- C语言实现栈(栈的链式实现)
- (C语言)栈的链式实现(数据结构九)
- 数据结构:栈的链式实现(C语言描述)
- Genymotion模拟器引起的Address already in use ADB server didn't ACK
- MySQL——sql优化(二)
- 乘法、除法与 0
- Different Ways to Add Parentheses
- mean开发之二:设置npm全局地址
- C语言链式栈和顺序栈的实现
- python 调用图像处理类库PIL 时遇到的问题
- 欢迎使用CSDN-markdown编辑器
- 把一个数的二进制表示反转后得到的数
- 数学测试5
- lsd-slam源码解读第三篇:算法解析
- 基于C/S的简单TCP网络编程
- 总结一下AJAX的写法——常规方法
- Android关于不同分辨率下图片被拉伸、压缩而失真的解决方案