算法与数据结构之栈的链式存储

简介:
#include<stdio.h>
#include<windows.h>
#include<malloc.h>
typedef int elemtype;
typedef struct linknode //链表的定义
{
elemtype data;
struct linknode *next;
} listack;
void initstack(listack *&s) //初始化
{
s=(listack *)malloc(sizeof(listack));
s->next=NULL;
}
void push(listack *s) //进栈
{
int e;
listack *p;
printf("请输入进栈元素:");
scanf("%d",&e);
p=(listack *)malloc(sizeof(listack));
p->data=e;
p->next=s->next;
s->next=p;
printf("进栈成功\n");
}
void gettop(listack *s) //取栈顶元素
{
int t;
if(s->next==NULL)
printf("栈空,取值失败!\n");
else
{
t=s->next->data;
printf("取值成功,栈顶元素为:%d\n",t);
}
}
void stackempty(listack *s) //判断链栈是否为空
{
if(s->next==NULL)
printf("栈为空\n");
else
printf("栈不为空\n");
}
void pop(listack *&s) //出栈
{
listack *p;
int e;
if(s->next!=NULL)
{
p=s->next;
e=p->data;
s->next=p->next;
free(p);
printf("出栈成功,栈顶元素为:%d\n",e);
}
else
printf("栈为空,出栈失败\n");
}
void destroy(listack *&s)
{
listack *p=s,*q=s->next;
char m;
getchar();
printf("确定要销毁栈,请输入y 否则不销毁!\n");
scanf("%c",&m);
if(m=='y')
{
while(q!=NULL)
{
free(p);
p=q;
q=p->next;
}
free(p);
printf("销毁成功!\n");
exit(0);
}
else
printf("链栈未销毁!\n");
}
void main()
{
listack *s;
int m;
printf(" ******************欢迎使用**********************\n");
initstack(s);
while(1)
{
printf("请选择:");
printf(" 1 进栈\n");
printf(" 2 判断栈是否为空\n");
printf(" 3 取栈顶元素\n");
printf(" 4 出栈\n");
printf(" 5 销毁栈\n");
printf(" 6 退出\n");
scanf("%d",&m);
switch(m)
{
case 1:push(s);break;
case 2:stackempty(s);break;
case 3:gettop(s);break;
case 4:pop(s);break;
case 5:destroy(s);break;
case 6:exit(0);
default:printf("输入错误,请重新输入\n");
}
}
}

目录
相关文章
|
8天前
|
消息中间件 存储 搜索推荐
深入理解栈和队列(二):队列
深入理解栈和队列(二):队列
24 0
|
9天前
|
存储 算法 索引
【算法与数据结构】队列的实现详解
【算法与数据结构】队列的实现详解
|
1天前
|
存储 机器学习/深度学习 算法
上机实验三 图的最小生成树算法设计 西安石油大学数据结构
上机实验三 图的最小生成树算法设计 西安石油大学数据结构
8 1
|
9天前
|
算法 索引
【算法与数据结构】深入二叉树实现超详解(全源码优化)
【算法与数据结构】深入二叉树实现超详解(全源码优化)
|
9天前
|
存储 算法
【算法与数据结构】深入解析二叉树(二)之堆结构实现
【算法与数据结构】深入解析二叉树(二)之堆结构实现
|
12天前
|
算法 C语言
【算法与数据结构】 C语言实现单链表队列详解2
【算法与数据结构】 C语言实现单链表队列详解
|
1月前
|
机器学习/深度学习 算法 生物认证
基于深度学习的人员指纹身份识别算法matlab仿真
基于深度学习的人员指纹身份识别算法matlab仿真
|
23天前
|
传感器 算法 计算机视觉
基于肤色模型和中值滤波的手部检测算法FPGA实现,包括tb测试文件和MATLAB辅助验证
该内容是关于一个基于肤色模型和中值滤波的手部检测算法的描述,包括算法的运行效果图和所使用的软件版本(matlab2022a, vivado2019.2)。算法分为肤色分割和中值滤波两步,其中肤色模型在YCbCr色彩空间定义,中值滤波用于去除噪声。提供了一段核心程序代码,用于处理图像数据并在FPGA上实现。最终,检测结果输出到&quot;hand.txt&quot;文件。
|
29天前
|
机器学习/深度学习 算法 计算机视觉
基于yolov2深度学习网络的视频手部检测算法matlab仿真
基于yolov2深度学习网络的视频手部检测算法matlab仿真
|
1月前
|
算法
【MATLAB】语音信号识别与处理:移动中位数滤波算法去噪及谱相减算法呈现频谱
【MATLAB】语音信号识别与处理:移动中位数滤波算法去噪及谱相减算法呈现频谱
20 2