栈之链栈
来源:互联网 发布:最新影视软件 编辑:程序博客网 时间:2024/05/16 11:36
本文主要介绍链栈。链栈就是没有附加头结点的运算受限的单链表。在文中的栈顶指针放在一个结构体中,主要是为了操作方便,也可以不放在结构体里面,这个看个人啦~~数据结构真的很有意思,我会一直学习,将我知道的理解的数据结构呈现出来,当然错误之处难免,还请各位指出,共同进步哈
#include<cstdio>#include<cstdlib>typedef char Datatype; //假定栈元素的数据类型为字符typedef struct node{ Datatype data; struct node *next;}StackNode;typedef struct{ //LinkStack结构类型的定义是为了方便在函数体中修改top指针本身 StackNode *top;}LinkStack;//********************************栈的一些基本操作**********************************void InitStack(LinkStack *S){ //将顺序栈置空 S->top=NULL;}int StackEmpty(LinkStack *S){ //判断顺序栈是否为空,若为空,则返回真,否则返回假 return S->top==NULL;}void Push(LinkStack *S,Datatype x){ //进栈操作 StackNode *p=(StackNode *)malloc(sizeof(StackNode)); p->data=x; p->next=S->top; //将新结点*p插入链栈头部 S->top=p; //修改栈顶指针}void Pop(LinkStack *S){ //出栈操作 StackNode *p=S->top; //保存栈顶指针 if(StackEmpty(S)){ printf("Stack underflow\n"); //下溢,退出运行 return ; } S->top=p->next; //将栈顶结点从链上摘下 free(p);}Datatype StackTop(LinkStack *S){ //取栈顶元素 if(StackEmpty(S)){ //栈空则无法取栈顶元素 printf("Stack is empty!\n"); return '?'; } return S->top->data;}void CreateStack(LinkStack *S){ //建立一个栈 char ch; while((ch=getchar())!='\n'){ Push(S,ch); } return ;}//***********************************测试函数********************************int main(){ LinkStack S; InitStack(&S); printf("输入一个字符串,来建立一个字符顺序栈:\n"); CreateStack(&S); printf("栈已建好!\n"); printf("栈顶元素是:%c\n",StackTop(&S)); printf("弹出栈顶元素:\n"); Pop(&S); printf("此时栈顶元素为:%c\n",StackTop(&S)); printf("将元素‘z’进栈:\n"); Push(&S,'z'); printf("此时栈顶元素是:%c\n",StackTop(&S)); return 0;}测试样例:
0 0
- 栈之链栈
- 栈之链栈
- 栈之链栈
- 数据结构之链栈
- 数据结构之链栈
- 数据结构之链栈
- 数据结构之链栈
- 数据结构之链栈
- c#之链栈
- 数据结构之链栈
- 数据结构之链栈
- 数据结构之链栈
- 实验之链栈
- 栈操作之栈链
- 数据结构之链栈实现
- 数据结构之链栈07
- 链栈之C++实现
- 线性表之链栈
- REST服务
- 腾讯提供的查询QQ在线状态
- JS获取GET参数
- Poj 2352 Stars 树状数组
- js中将int类型转为float类型,并取位
- 栈之链栈
- OC教程6-1-block各种用法
- Java基础第四篇 面向对象的基本概念(中)
- 2014华为机试题13:打渔还是晒网
- 使用代码写成json串
- 自定义对象属性为空自动转换为字符串
- Maven学习资源
- [HDOJ 4940] Destroy Transportation system [最大流]
- 测试C++代码与WebBrowser HTML的互动