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==-) 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语言数据结构学习心得——栈的更多相关文章
- c语言数据结构学习心得——二叉树
		
二叉树 n(n>=0)个结点的有限集合:(五种形态) 1.或者为空二叉树,n=0: 2.或者由一个根结点和两个互不相交的被称为根的左子树和右子树组成.左子树和右子树又分别是一棵二叉树. 3.每个 ...
 - c语言数据结构学习心得——图
		
图G由顶点集V和边集E组成,记为G=(V,E) 图不可为空,一定有顶点集不为空 有向图:有向边(弧)的有限集合 无向图:无向边的有限集合 连通:顶点V到顶点V'有路径 连通分量:无向图中的极大连通子图 ...
 - c语言数据结构学习心得——排序
		
排序:将无序的序列重新排列为有序的序列. 插入类排序 插入类排序:在一个有序的序列中,插入一个新的关键字,知道所有的关键字都插入形成一个有序的序列. 直接插入排序:首先以一个元素为有序的序列,然后将后 ...
 - c语言数据结构学习心得——查找
		
顺序查找(线性查找) 主要用于在线性表中的查找 int Search1(int a[],int n,int key){ ;i<=n;i++){ //注意从1开始 if(a[i]==key)ret ...
 - c语言数据结构学习心得——树
		
树 一对多的树型结构,有且只有一个特定的根结点. 结点的度:结点拥有子树的数量{ 度为0:叶子结点/终端结点. 度不为0:非终端结点/分支结点(除去根结点其它称为内部结点).} 树的度:树中所有结点的 ...
 - c语言数据结构学习心得——队列
		
队列 只允许在一端进行插入,在另一端进行删除的线性表 队头(Front):允许删除的一端(队首) 队尾(Rear):允许插入的一端 FIFO:先进先出 不要求从数组首位开始存储队列 #define M ...
 - c语言数据结构学习心得——线性表
		
线性表:具有相同数据类型的n(n>0)个数据元素的有限序列. 主要有顺序存储和链式存储. 顺序存储: 特点:地址连续,随机/存取,顺序存储. 建立:首地址/存储空间大小(数组),表长. 方式:静 ...
 - c语言数据结构学习心得——数据结构基本概念
		
1.数据>数据元素>数据项 数据的基本单位是数据元素,数据元素的基本单位是数据项 2.运算的定义->针对逻辑结构 集合:同属于一个集合,无其他关系.(数学上的集合) 线性结 ...
 - 数据结构学习之栈求解n皇后问题
		
数据结构学习之栈求解n皇后问题 0x1 目的  深入掌握栈应用的算法和设计 0x2 内容  编写一个程序exp3-8.cpp求解n皇后问题. 0x3 问题描述 即在n×n的方格棋盘上,放置n个皇后 ...
 
随机推荐
- Tornado 高并发源码分析之三--- Application 对象
			
Application 对象主要工作: 服务器启动时: 1.在新建一个app的时候,根据设置好的 URL 和回调函数 Handler 封装成URLSpec 对象 服务器运行时: 2.在请求到来,将 ...
 - jquery中选中复选框1.8之前与1.8之后的区别
			
在jquery 1.8.x中的版本,我们对于checkbox的选中与不选中操作如下: 判断是否选中 $('#checkbox').prop('checked') 设置选中与不选中状态: $('#che ...
 - bash shell笔记1 脚本基础知识
			
原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://twentyfour.blog.51cto.com/945260/505644 * ...
 - 斯坦福CS229机器学习课程笔记 part3:广义线性模型 Greneralized Linear Models (GLMs)
			
指数分布族 The exponential family 因为广义线性模型是围绕指数分布族的.大多数常用分布都属于指数分布族,服从指数分布族的条件是概率分布可以写成如下形式:η 被称作自然参数(nat ...
 - 使用Nuget发布自己的类库包
			
NuGet是一个为大家所熟知的Visual Studio扩展,通过这个扩展,开发人员可以非常方便地在Visual Studio中安装或更新项目中所需要的第三方组件,同时也可以通过NuGet来安装一些V ...
 - 刷题向》关于搜索+tarjan的奇怪组合题 BZOJ1194 (normal+)
			
关于这道题,其实看懂了的话还是比较好写的,只是题目实在又臭又长,没有让人读下去的勇气. 给出题目翻译: 给你S张图, 每张图有M个点,其中M个点中有N个是特殊单位,会给出. 每个点又有0.1两条边指向 ...
 - mysql  纸  mysql_fetch_array  OR mysql_fetch_assoc OR mysql_fetch_row
			
<?php $con = mysql_connect("localhost", "root", "123456");if (!$con ...
 - Got permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Get http://%2Fvar%2Frun%2Fdocker.sock/v1.38/images/json: dial unix /var/run/docker.sock: conne
			
使用docker报如下错误信息: Got permission denied while trying to connect to the Docker daemon socket at unix:/ ...
 - 面试题:JavaIO流分类详解与常用流用法实例
			
Java流概念: Java把所有的有序数据都抽象成流模型,简化了输入输出,理解了流模型就理解了Java IO.可以把流想象成水流,里面的水滴有序的朝某一方向流动.水滴就是数据,且代表着最小的数据流动单 ...
 - Hyperledger Fabric系统架构