c语言数据结构学习心得——栈

栈(Stack)

只允许在一端进行插入或删除操作的线性表

栈顶(Top):栈中允许进行插入和删除操作的那一端;

栈底(Bottom):固定的,不允许进行插入或删除的另一端

1.栈是受限的线性表,所以自然具有线性关系。

2.栈中元素后进先出。

栈的顺序存储==顺序栈

#define MaxSize 50             //定义栈中元素的最大个数
typedef struct{Elemtype data[MaxSize]; //存放栈中元素
}Sqstack;                      //顺序栈简写

1.Top的值不能超过MaxSize;

2.空栈的判定条件通常为top==-1,满栈的判定条件为top=MaxSize-1,栈中元素个数为top+1.

顺序栈的操作:

1.判空

bool StackEmpty(SqStack S){if(S.top==-1) return true;else               return false;
}

2.进栈

bool Push(SqStack &S,Elemtype x){if(S.top==MaxSize-1) return false;S.data[++S.top]=x; return true;
}

3.出栈

bool Pop(SqStack &S,Elemtype &x){if(S.top==-1) return false;x=S.data[S.top--]; return true;
}

4.读取栈顶元素

bool GetTop(SqStack S,Elemtype &x){if(S.top==-1) return false;x=S.data[S.top];return true;
}

 

 

共享栈

顺序栈的存储空间大小需要事先开辟好,对每个栈各自单独开辟存储空间的利用率不如将各个栈存储空间共享

  栈满条件下:指针top1与指针top2只相差1,即top1+1=top2.

  结构:

#define MaxSize 100            //定义栈中元素的最大个数
typedef struct{Elemtype data[MaxSize]; //存放栈中元素int top1;int top2;
}SqDoublestack;               //顺序共享栈简写

  进栈:

bool Push(SqDoubleStack &S,ElemType x,int stackNum0{if(S.top1+1=S.top2) return false;if(stackNum==1) S.data[++S.top1]=x;//栈1有元素进栈if(stackNum==2) S.data[++S.top2]=x;//栈2有元素进栈return true;
}

 

 

栈的链式存储==链栈

头指针当作栈顶指针,栈顶存放在单链表头部。

typedef struct SNode{ElemType data;      //存放栈中元素struct SNode *next; //栈顶指针
}SNode *SLink               //链栈的结点

typedef struct LinkStack{SLink top;    //栈顶指针int count;    //链栈结点数
}LinkStack                 //链栈

1.链栈一般不存在满栈

2.空栈的判定关系一般为top=NULL

进栈

bool Push(LinkStack &S,ElemType x){SLink p=(SLink)mallo((sizeof(SNode));//给新元素分配空间p->data=x;                           //新元素的值p->next=s->top;                      //p的后继指针指向新的元素s->top=p;                            //栈顶指针指向新的元素s->count++;                          //栈中元素加1return true;
}

出栈

bool Pop(LinkStack &S, ElemType &x){if(S->top==NULL) return false;x=S->top->data;          //栈顶元素值Slink p=S->top;          //辅助指针S->top=S->top->next;     //栈顶指针后移free(p);                 //释放被删除数据的存储空间S->count--;  栈中元素个数减1return true;
}

 

转载于:https://www.cnblogs.com/suprechen/p/10597225.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:https://dhexx.cn/news/show-17478.html

如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网进行投诉反馈,一经查实,立即删除!


相关文章:

  • MySQL学习笔记:一道group by+group_concat解决的小问题
  • [SDOI2009] HH去散步 (矩阵乘法)
  • BUAA OO 2019 第一单元作业总结
  • HAOI2018 反色游戏
  • 软件工程导论 四则运算
  • 安卓系统怎么样不Root激活XPOSED框架的方法
  • 页面滚动可视区域的获取
  • VScode加文件头的方式
  • jar包引用版本不一致引发的问题
  • [Swift]LeetCode831. 隐藏个人信息 | Masking Personal Information
  • 解决:win10在空白处右键资源管理器重启的故障
  • idea取消vim模式
  • 关于RabbitMQ Queue Argument的简介
  • unittest框架(惨不忍睹低配版)
  • vmware vsphere出现“需要整合虚拟机磁盘”的告警处理方法(完整版)
  • webpack遇见的坑:Please install 'webpack-cli' in addition to webpack itself to use the CLI.
  • Docker for Windows(一)下载与安装
  • 21 , CSS 构造模型
  • 简述数据库优化
  • Golang 入门 : 打造开发环境
  • JavaWeb项目服务端获取客户端的IP地址
  • Kafka分区分配策略(Partition Assignment Strategy
  • [Linux]不可重入函数
  • 交叉熵反向求导计算过程
  • UML第二次作业 类图中类的表示
  • poj 1852 Ants
  • 你真的懂JavaScript基础类型吗
  • UVALive 5760 Alice and Bob
  • Jason与Xml的解析过程
  • 安装grid时找不到ASM共享磁盘
  • 洛谷.5283.[十二省联考2019]异或粽子(可持久化Trie 堆)
  • BOMDOM
  • Hive——元数据表含义
  • 2072=删数问题
  • Python_装饰器精讲_33
  • 使用Google zxing生成二维码
  • 影之刃简介
  • 鼠标单击元素输出对应元素的索引号
  • pod BaiduMapKit 报错解决方案
  • 业务知识学习整理
  • Kubernetes之(十四)StatefulSet控制器
  • 6.旋转数组的最小数字
  • docker安装vim
  • daty3
  • open 函数小结
  • LiveNVR传统安防摄像机互联网直播-主要功能模块及相关技术特点与性能指标
  • 结对编程项目-四则运算 第二周
  • 自定义头文件之二------hlib.h(慢慢更新)
  • bzoj 1503: [NOI2004]郁闷的出纳员 (splay)
  • [2019.04.16] 由Python写成的自动解压脚本