数据结构----栈的链式存储结构源码
时间:2020-04-12
本文章向大家介绍数据结构----栈的链式存储结构源码,主要包括数据结构----栈的链式存储结构源码使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
数据结构----栈的链式存储结构源码
// 栈是仅限定在表尾进行插入和删除的操作的表;下面以栈的链式储存结构为例。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct StackNode{
int data;
struct stacknode *next;
}stacknode,*linkstackptr;
typedef struct LinkStack{
linkstackptr top;
int cnt;
}linkstack;
int Initstack(linkstack *s)
{
s->top=(linkstackptr)malloc(sizeof(stacknode));
if(!(s->top))
return -1;
s->top=NULL;
s->cnt=0;
return 1;
}
int push(linkstack *s,int val)
{
linkstackptr p=(linkstackptr)malloc(sizeof(stacknode));
if(!p)
return -1;
p->data=val;
p->next=s->top;
s->top=p;
s->cnt++;
return 1;
}
int length(linkstack *s)
{
if(s->cnt==0)
return 0;
else
return s->cnt;
}
int pop(linkstack *s)
{
linkstackptr p;
if(length(s)==0)
return -1;
p=s->top;
s->top=s->top->next;
free(p);
s->cnt--;
return 1;
}
int get(linkstack *s)
{
if(length(s)==0)
return -1;
return s->top->data;
}
int clear(linkstack *s)
{
linkstackptr q,p=s->top;
while(p)
{
q=p;
p=p->next;
free(q);
}
s->cnt=0;
return 1;
}
int show(linkstack *s)
{
if(s->cnt==0)
return -1;
linkstackptr p=s->top;
while(p)
{
printf("%d ",p->data);
p=p->next;
}
printf("\n");
}
int main()
{
int k;
linkstack L;
k=Initstack(&L);
if(k==-1)
{
printf("内存分配失败,栈的链式储存初始化失败\n");
return 0;
}
else
{
printf("恭喜你!内存分配成功,栈的链式储存初始化成功!栈中元素为零!\n");
}
printf("请输入一些元素,用以入栈!以输入-1代表结束:\n");
int n;
while(~scanf("%d",&n))
{
if(n==-1)
break;
push(&L,n);
}
printf("压栈成功!栈顶到栈底元素为:\n");
show(&L);
char s[50];
printf("输入你想要进行的操作(输入end代表结束):push,length,pop,get,clear,show\n");
memset(s,'\0',sizeof(s));
while(~scanf("%s",s))
{
if(!strcmp(s,"end"))
break;
if(!strcmp(s,"push"))
{
int flag,tmp;
printf("请输入你要压入栈顶的元素:");
scanf("%d",&flag);
tmp=push(&L,flag);
if(flag==-1)
printf("动态内存分配失败!压栈失败!\n");
else
{
printf("动态内存分配成功!压栈成功!\n栈顶到栈底元素为:");
show(&L);
}
}
if(!strcmp(s,"length"))
{
int tmp;
tmp=length(&L);
printf("栈中元素个数为:%d\n",tmp);
}
if(!strcmp(s,"pop"))
{
int flag;
flag=pop(&L);
if(flag==-1)
printf("栈中元素个数为零,出栈失败!\n");
else
{
printf("恭喜你!出栈成功!\n栈顶到栈底的元素为:");
show(&L);
}
}
if(!strcmp(s,"get"))
{
int flag;
flag=get(&L);
if(flag==-1)
printf("栈中元素个数为零,获取栈顶元素失败!\n");
else
{
printf("恭喜你!获取成功,栈顶元素为:%d\n",flag);
}
}
if(!strcmp(s,"clear"))
{
int flag,tmp;
flag=clear(&L);
if(flag==1)
{
tmp=length(&L);
printf("恭喜你!清理成功,栈中元素为:%d\n",tmp);
printf("程序结束!\n");
break;
}
}
if(!strcmp(s,"show"))
{
int flag,tmp;
flag=length(&L);
if(flag==0)
printf("栈中元素个数为零!展示失败!\n");
else
{
printf("恭喜你!展示成功,栈顶到栈底元素为:\n");
tmp=show(&L);
}
}
memset(s,'\0',sizeof(s));
}
return 0;
}
原文地址:https://www.cnblogs.com/Yqifei/p/12687711.html
- Google官方网页载入速度检测工具PageSpeed Insights 使用教程
- ASP.NET 路由
- Kafka定时清除过期数据
- 腾讯高级副总裁郭凯天:打造腾讯智库分析互联网产业前沿问题
- Google Chrome 浏览器 开发者工具 使用教程
- 反向代理(Reverse Proxy)及 IIS 7 应用请求路由模块
- 2014腾讯“大数据连接的未来”高峰论坛在京召开
- 工作流、业务流程管理和SOA
- 面向对象设计的SOLID原则
- 用psake来简化自动化脚本的构建
- TESLA V100如何让质疑GPU的流言“失声”
- Web 前端性能优化相关内容解析
- Service Broker 无法工作的问题修复
- .NET代码快速转换成powershell代码
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- uni-app 与 Vue H5 项目通讯
- Gridview][UpdateCommand的写法要点]
- MySQL系列之事务日志Undo log学习笔记
- click 延时解决方案
- Splash抓取javaScript动态渲染页面
- Sentence-Transformer的使用及fine-tune教程
- MySQL系列之事务日志Redo log学习笔记
- jQuery 的基本使用
- uni-app项目改用vue-cli npm运行报错及问题总汇
- 10.3【前端开发】背景图片:如何使用精灵图?
- Angular依赖注入官方文档的学习笔记
- jQuery 选择器
- MySQL系列之二进制日志Binlog学习笔记
- jQuery 效果
- jQuery 属性操作