线性表之栈(代码片段)

zuixime0515 zuixime0515     2022-12-29     119

关键词:

栈的定义:

  一种只能在一端进行插入或删除操作的线性表被称为栈,其中允许删除或插入的一端为栈顶,另一端为栈底,栈底固定不变;

  栈的特点:先进后出,例如弹夹,先装的子弹最后才能出;

  按照存储结构可以分为两种栈:

  • 顺序栈
  • 链式栈

栈的结构体定义:

顺序栈:

  

//顺序栈的结构体定义
typedef struct 
    int data[MaxSize];
    //栈顶指针
    int top;
SqStack;

链式栈:

//链栈结构体定义
typedef struct LNode 
    int data;
    struct LNode* next;
LNode;

  ps:有没有发现链式栈和单链表定义一模一样;其实栈的本质就是受约束的线性表;

基本算法:

判断栈是否为空:

bool IsEmptyS(SqStack s) 
    if (s.top == -1)
        return true;
    else
        return false;

栈是否为为满:

bool IsFullS(SqStack s) 
    if (s.top == MaxSize - 1)
        return true;
    else
        return false;

栈的初始化:

void InitialStack(SqStack &s) 
    //规定top=-1时为空栈
    s.top = -1;

入栈:

bool push(SqStack &s, int x) 
    if (s.top == MaxSize - 1)
        return false;
    s.data[++s.top] = x;
    return true;

出栈:

int pop(SqStack &s) 
    if (s.top == -1)
        return false;
    return s.data[s.top--];
    

打印整个栈:

void PrintStack(SqStack s) 
    if (s.top == -1) 
        cout << "栈空,无法打印" << endl;
    
    int i = s.top;
    for (i; i >= 0; i--) 
        cout << s.data[s.top--]<<"	";
    

    cout << endl;

测试用例:

int main()

    
    int a[4] =  1,2,3,4 ;
    SqStack s;
    InitialStack(s);
    cout << "顺序栈测试" << endl;
    
    for (int i = 0; i < 4; i++) 
        push(s, a[i]);
    
    PrintStack(s);

    cout << "2入栈" << endl;
    push(s, 2);
    cout << "10入栈" << endl;
    push(s, 10);
    PrintStack(s);
    cout << "出栈第一次	" << pop(s) << endl;
    cout << "出栈第二次	" << pop(s) << endl;
    cout << "出栈第三次	" << pop(s) << endl;

    PrintStack(s);

    system("pause");
    return 0;

 

数据结构线性表之实现单链表(代码片段)

数据结构线性表之实现单链表数据结构线性表之实现单链表相关文章单链表定义单链表相关操作数据结构线性表之实现单链表相关文章数据结构线性表之概念(一)数据结构线性表之抽象基类(二)数据结构线性表之实现顺序表(三)数... 查看详情

数据结构线性表之实现单循环链表(代码片段)

数据结构线性表之实现单循环链表数据结构线性表之实现单循环链表相关文章单循环链表单循环链表定义数据结构线性表之实现单循环链表相关文章数据结构线性表之概念(一)数据结构线性表之抽象基类(二)数据结构线性表之实... 查看详情

线性表之顺序表(代码片段)

线性表的结构体定义:#defineMaxSize100typedefstructintdata[MaxSize];intlength;Sqlist;  顺序表在内存中以数组形式保存,是一组连续的内存空间。顺序表基本算法:构造一个空的线性表://初始化线性表STATUSInitList(Sqlist&L)//置表长为0L.len... 查看详情

数据结构(线性表之单链表)(代码片段)

文章目录🥇为何要使用链表🥇单链表是什么单链表的数据存储方式🥇单链表之创建链表🥇单链表之打印链表🥇单链表之计算链表长度🥇单链表之增删查改单链表之头插法单链表之尾插法单链表之把一个... 查看详情

线性表之单链表(代码片段)

在学完线性表之后,总结一下顺序表的优缺点优点无须为元素之间的逻辑结构增添额外的储存空间,自成一体。随机存取,十分方便。缺点空间利用率不高,容易造成“碎片”。插入删除操作需要移动大量的元素。当线性... 查看详情

数据结构之顺序表(代码片段)

...找元素操作顺序表之任意位置插入顺序表之任意位置擦除线性表之查看有多少元素线性表之修改任意位置线性表之销毁空间综合SeqList.h文件内容SeqList.c文件内容前言讲完算法效率,就正式开始我们的数据结构 查看详情

线性表之数组描述(代码片段)

 1.线性表的描述可以分为两种数组描述:StaticList和DynamicList(动态数组)链式描述2.数组描述 数组描述方法将元素存储在一个数组中,通过一个索引以确定每个元素存储的位置 所有元素依次存储在一片连续的存储空... 查看详情

数据结构学习总结线性表之顺序表(代码片段)

...dquo;一对一”逻辑关系的数据,最佳的存储方式是使用线性表。那么,什么是线性表呢?线性表,全名为线性存储结构。使用线性表存储数据的方式可以这样理解,即“把所有数据用一根线儿串起来,再存储到物理空间中&r... 查看详情

02线性表之顺序表(代码片段)

肚子饿了就要吃  ~  嗝 ———路飞 目录1.本章重点2.线性表3.顺序表实现3.1顺序表的概念及结构4.静态顺序表5.动态顺序表 5.1“增”尾插:头插:5.2“删”尾删头删5.3随机“插入”5.4随机“删除”5.5内存销毁5.6“改”5... 查看详情

线性表之链表(代码片段)

单链表也是一种链式存取的线性表,用一组地址任意的存储单元存放线性表中的数据元素。链表中的数据是以结点来表示的,以next指针指向下一个节点而链接起来,相比于顺序表,链表有着快速增加,删除节点的优势,其节点... 查看详情

数据结构与算法-线性表之双向链表(代码片段)

...3561803.htmlhttps://blog.csdn.net/howlaa/article/details/385132351、概述线性表是一种线性结构,由数组、单项链表和双向链表组成,这里讲讨论双向链表的理论知识和实现代码。双向链表和单项链表类似,双向链表由两个指针作为指针域,分... 查看详情

java数据结构线性表之链表(代码片段)

目录(1)链表(2)单向链表(2.1)单向链表API设计(2.2)单向链表代码实现(3)双向链表(3.1)结点API设计(3.2)双向链表API设计(3.3)双向链表代码实现& 查看详情

java数据结构线性表之链表(代码片段)

目录(1)链表(2)单向链表(2.1)单向链表API设计(2.2)单向链表代码实现(3)双向链表(3.1)结点API设计(3.2)双向链表API设计(3.3)双向链表代码实现& 查看详情

线性表之顺序存储结构(顺序表)(代码片段)

目录1.线性表2.顺序存储结构(顺序表)2.1顺序表一般可以分为: 1.静态顺序表:使用定长数组存储元素 1.1静态顺序表:顺序表的大小是确定的,容量是固定的.    结论:静态顺序表不是很常量,了解就行.2.动态顺序表:... 查看详情

03线性表之链表(代码片段)

肚子饿了就要吃  ~  嗝 ———路飞 1.本章重点链表表示和实现(单链表+双链表)链表的常见OJ题顺序表和链表的区别和联系2.为什么需要链表引子:顺序表的问题及思考(1)动态顺序表特点:插入数据,... 查看详情

数据结构之线性表之顺序存储java实现(代码片段)

文章目录线性表的定义线性表的基本运算线性表的存储之顺序存储定义线性表添加元素查找元素删除元素打印线性表实现的完整代码测试一下线性表的定义线性表的逻辑特征:①有且仅有一个称为开始元素的a1,她没有前... 查看详情

算法习题---线性表之单链表逆序打印(代码片段)

一:题目逆序打印单链表中的数据,假设指针指向单链表的开始结点二:思路1.可以使用递归方法,来进行数据打印2.可以借助数组空间,获取长度,逆序打印数组3.若是可以,对链表数据使用头插法,逆序排列,然后正序打印即... 查看详情

数据结构学习总结线性表之单链表(代码片段)

   一,回忆链表  链表,别名链式存储结构或单链表,用于存储逻辑关系为"一对一"的数据。与顺序表不同,链表不限制数据的物理存储状态,换句话说,使用链表存储的数据元素,其物理存储位置是随机的。&nbs... 查看详情