栈(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

c语言数据结构学习心得——栈相关推荐

  1. c语言数据结构学习心得——线性表

    线性表:具有相同数据类型的n(n>0)个数据元素的有限序列. 主要有顺序存储和链式存储. 顺序存储: 特点:地址连续,随机/存取,顺序存储. 建立:首地址/存储空间大小(数组),表长. 方式:静 ...

  2. C语言数据结构学习用单元测试

    药物名称: C语言数据结构学习用单元测试 主治: 本品是基于CUnit编写的.全部的.纯C的数据结构(ADT)各种实现的单元测试.主治基础不牢,水品增长缓慢.建议配合严蔚敏<数据结构>(C ...

  3. 数据结构学习之栈求解n皇后问题

    数据结构学习之栈求解n皇后问题 0x1 目的 ​ 深入掌握栈应用的算法和设计 0x2 内容 ​ 编写一个程序exp3-8.cpp求解n皇后问题. 0x3 问题描述 即在n×n的方格棋盘上,放置n个皇后 ...

  4. Python数据结构学习笔记——栈

    目录 一.栈的定义和特性 (一)栈的定义 (二)栈的反转特性 二.实现分析步骤 三.栈的Python实现代码 四.栈的应用 (一)匹配圆括号 (二)匹配符号 (三)模2除法(十进制转二进制) (四)进 ...

  5. 计算机数据结构英语作文,数据结构学习心得英语作文

    数据结构学习心得英语作文 Data structure is a study in computer programming and the object of the relationship be ...

  6. c语言编程基础心得,C语言编程学习心得体会

    C语言是在国内外广泛使用的一种计算机语言.其语言功能丰富.表达能力强.使用灵活方便.既具有高级语言的优点,又具有低级语言的许多特点,适合编写系统软件.本文是C语言编程学习心得,希望对大家有帮助. C语 ...

  7. 获奖感言和C语言的学习心得

    获奖感言和C语言的学习心得 自我介绍: 大家好,我的名字叫袁忠,我来自湖南,今年快19岁了,现在是大学一年级,我平时喜欢跑步.打羽毛球,我也喜欢学算法与数学,以及喜欢看一些与计算机有关的书籍,每次我学 ...

  8. 数据结构学习心得总结

    开篇 经过近一个月的学习,终于将郝斌老师讲的数据结构视频看完了~ 学习完成后,受益良多,也非常喜悦,非常开心,好像终于打了一场胜仗一样! 我打算将这一个月的学习心得做一个汇总,记录下来. 希望能给初学 ...

  9. oc语言和c语言,C语言及OC语言初期学习心得

    2015-7-22,周三 经过一个星期C语言的学习,对基础知识语法已经有了一定的了解和认识.同时通过这三天对OC语言的学习,更加了解编程语言都是相融相通的.虽然 OC语言的语法和之前接触的C,JAVA ...

  10. 《C语言初步学习心得》

    通过大于两个月对C语言的学习,我对C语言有了初步了解,下面我将说一说我的收获的知识.他们能解决什么问题.和我的感悟. 1.第二章主要学习了数据的基本类型数据可以分为整型和实型:整型中最常用的定义是 i ...

最新文章

  1. mysql 最长字符串_那些年的Mysql
  2. Mongodb 笔记04 特殊索引和集合、聚合、应用程序设计
  3. 【图像处理】——Python鼠标框选ROI(感兴趣)区域并且保存(含鼠标事件)
  4. 如何创建自己的composer包
  5. [学习笔记] 七步从Angular.JS菜鸟到专家(3):数据绑定和AJAX [转]
  6. php 两个单词 正则表达式字符前_【阅读整理】正则表达式 - 基础篇
  7. mysql 配置详解
  8. 2018最新游戏蛮牛Egret游戏引擎
  9. 2019 中科院 信工所二室 夏令营 笔试面试经验
  10. sparksql 与flinksql 建表 与 连表记录
  11. linux centos无线网卡驱动安装,CentOS 6.5 安装无线网卡驱动实现无线上网
  12. Module parse failed Unexpected token
  13. mixpanel umeng talkingdata
  14. linux下QT发布程序双击打不开解决方法
  15. 面向对象,继承封装的应用
  16. 常用财务指标计算公式(信贷指标公式)
  17. 【题解】CF#855 G-Harry Vs Voldemort
  18. 工作15年码农总结:学编程难吗?那只是你觉得难!
  19. 【ChatGPT整活大赏】写论文后自动生成视频
  20. 理财入门-读《小狗钱钱》有感

热门文章

  1. 帆软 FR.i18n 消息关键字或隐藏加载关键字
  2. 团队作业4——beta阶段冲刺4
  3. The Closest M Points//kd树+优先队列
  4. Centos-Nginx-Docker 入门(一)
  5. Tomcat使用Tomcat Native和APR
  6. ubuntu下adb突然找不到显示List of devices attached
  7. 售前更需要关注客户业务
  8. TuxOnIce! 休眠到硬盘[zt]
  9. RFC 793翻译(TCP的主体内容)
  10. Redis10-RDB持久化