栈(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==-) return true;
else return false;
}

2.进栈

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

3.出栈

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

4.读取栈顶元素

bool GetTop(SqStack S,Elemtype &x){
if(S.top==-) 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+=S.top2) return false;
if(stackNum==) S.data[++S.top1]=x;//栈1有元素进栈
if(stackNum==) 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++; //栈中元素加1
return 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--; 栈中元素个数减1
return true;
}

c语言数据结构学习心得——栈的更多相关文章

  1. c语言数据结构学习心得——二叉树

    二叉树 n(n>=0)个结点的有限集合:(五种形态) 1.或者为空二叉树,n=0: 2.或者由一个根结点和两个互不相交的被称为根的左子树和右子树组成.左子树和右子树又分别是一棵二叉树. 3.每个 ...

  2. c语言数据结构学习心得——图

    图G由顶点集V和边集E组成,记为G=(V,E) 图不可为空,一定有顶点集不为空 有向图:有向边(弧)的有限集合 无向图:无向边的有限集合 连通:顶点V到顶点V'有路径 连通分量:无向图中的极大连通子图 ...

  3. c语言数据结构学习心得——排序

    排序:将无序的序列重新排列为有序的序列. 插入类排序 插入类排序:在一个有序的序列中,插入一个新的关键字,知道所有的关键字都插入形成一个有序的序列. 直接插入排序:首先以一个元素为有序的序列,然后将后 ...

  4. c语言数据结构学习心得——查找

    顺序查找(线性查找) 主要用于在线性表中的查找 int Search1(int a[],int n,int key){ ;i<=n;i++){ //注意从1开始 if(a[i]==key)ret ...

  5. c语言数据结构学习心得——树

    树 一对多的树型结构,有且只有一个特定的根结点. 结点的度:结点拥有子树的数量{ 度为0:叶子结点/终端结点. 度不为0:非终端结点/分支结点(除去根结点其它称为内部结点).} 树的度:树中所有结点的 ...

  6. c语言数据结构学习心得——队列

    队列 只允许在一端进行插入,在另一端进行删除的线性表 队头(Front):允许删除的一端(队首) 队尾(Rear):允许插入的一端 FIFO:先进先出 不要求从数组首位开始存储队列 #define M ...

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

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

  8. c语言数据结构学习心得——数据结构基本概念

    1.数据>数据元素>数据项      数据的基本单位是数据元素,数据元素的基本单位是数据项 2.运算的定义->针对逻辑结构 集合:同属于一个集合,无其他关系.(数学上的集合) 线性结 ...

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

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

随机推荐

  1. IIS监控应用程序池和站点假死,自动重启IIS小工具

    文章技术适合初学者.高级的C#开发工程师这些估计都熟悉到烂了,望不要喷. 第一.C#代码要操作IIS 就必须先导入 Microsoft.Web.Administration.dll ,方便控制台程序做 ...

  2. 【转】VS 安全开发生命周期(SDL)检查

    前面在学习使用google的protobuf时在VS2012中一直无法编译编译通过,经过查找一些资料原来发现,并不是protobuf的问题,而是自己在使用VS2012时,没有完全了解VS2012的强大 ...

  3. 【原】Coursera—Andrew Ng机器学习—Week 4 习题—Neural Networks 神经网络

    [1] Answer:C [2] Answer:D 第二层要输出四个元素a1 a2 a3 a4.输入x有两个,加一个x0是三个.所以是4 * 3 [3] Answer:C [4] Answer:C [ ...

  4. c语言之字符串数组

    一.字符串与字符串数组 1.字符数组的定义 char array[100]; 2.字符数组初始化 char array[100] = {'a','b','c'};  //array[0] = 'a' ...

  5. SP1557 GSS2 - Can you answer these queries II

    一开始看不懂题解,看懂了题解之后觉得还是挺妙的. 好多题解里都提到了HH的项链,但是我觉得关系并不大啊…… 先把所有询问离线下来按照右端点排序,按照询问的要求一个一个加入数字,怎么加入数字,我们设计一 ...

  6. 数据库 MySQL 之 基本概念

    数据库 MySQL 之 基本概念 浏览目录 概述 数据库的特点 数据库的分类 选择MySQL的理由 & MariaDB 介绍 下载及安装 SQL介绍 一.概述 1.数据(data) 存储在表中 ...

  7. 【linux命令】setterm控制终端属性命令(中英文)

    [linux命令]setterm控制终端属性命令(中英文) 2018年03月23日 17:13:44 阅读数:489 标签: linux 更多 个人分类: linux 摘自:https://blog. ...

  8. 2.8.2 并发下的ArrayList,以及源码分析

    package 第二章.并发下的ArrayList; import java.util.ArrayList;import java.util.List; /** * Created by zzq on ...

  9. css总结10:父标签没有定义高度,盒子异常移动

    1 问题:在父标签没有定义高度的情况下,嵌套的盒子浮动后,父标签下面的元素发生位置错误. 2 解决方法: 2.1(大厂网页常用方法) 添加额外元素: 即:父标签下添加一个元素(.clearfix),去 ...

  10. if 判断

    语法一: if 条件: #条件成立时执行的字代码块 代码1 代码2 代码3 示例: sex='female' age=18 is_beautiful=True if sex == 'female' a ...