数据结构之第三章之栈

栈和队列其实就是操作受限的队列。

1~~栈的特点:栈是限定仅在表的另一端(栈顶)进行插入,删除操作的线性表,是后进先出的线性表。

2~~顺序栈

    (1)顺序栈的存储表示

typedef struct Node{
      struct Node *base;//栈底指针,在栈构造之前和销毁之后,base的值为NULL
      struct Node *top;//这个是栈定指针,用以压栈的位置。
      int size;//当前已分配的存储单元数,以元素为单位
}NODE,*PNODE;

(2) 压栈操作

int push(PNODE head,int e){
//插入元素为e的新的栈顶元素
        if(head.top-head.base>=head.size)//栈满,追加存储空间{
            head.base=(PNODE)malloc(sizeof(NODE));
            if(head.base==NULL)//存储分配失败
                exit(-1);
            head.top=head.base+head.size;
            head.size+=STACKINCREMENT;
        }
        *head.top++=e;//先传输据再移指针
        return 1;
}

(3)弹栈操作

int pop(PNODE head,int e){
        //若栈不为空,则删除head的栈顶元素,用e返回其值
        if(head.top==head.base)
            return 0;
        e=*--head.top;//先移指针再传数据
        return 1;
}

3~~链式栈

(1)链式栈的存储表示

typedef  struct Lnode{
        int data;//数据域
        struct Lnode *next;//指针域
}NODE,*PNODE;
 

指向表头的指针为栈定指针

(2)  压栈操作

int push(PNODE head,int e){
        phead=(PNODE)malloc(sizeof(NODE));
        p->data=e;
        p->next=head.next;
        head.next=phead;

}

(3) 弹栈操作

int pop(PNODE head,int e){
        if(!head->next)
            return 0;
        phead=head->next;
        head->next=phead->next;
        e=phead->data;
        free(phead);
        return 1;
}
时间: 2024-10-18 19:44:25

数据结构之第三章之栈的相关文章

第三章小结--栈与队列

第三章小结 第三章我们主要学习了栈和队列.经过第一次的写博客,与课后的学习与借鉴.我看到很多其他的同学在整理知识的时候采用了画大纲图,架构图的方法.不得不说,那样子确实比纯粹的文字更加简单明了.于是我决定也学习和效仿一下. 以下便是图解: 通过大图来看,很明显,和前面学习的顺序表,链表栈和队列的操作有同工异曲之妙.实际上围绕着栈和队列的也是分为两大分支,顺序表和链表.操作也是从初始化,插入,删除,查找几个操作入手. 当然,也有不同的地方,栈是典型的先进而后出,队列则是先进先出,其插入和删除的操作

数据结构读书笔记----------第三章 栈和队列

3.1  栈的定义 栈是限制在表的一端进行插入和删除操作的线性表.允许进行插入,删除操作的一端是栈顶.另一个固定端称为栈底,当表中美柚元素时候称为空栈.是一种后进先出的线性表. 3.2 栈的顺序存储和运算实现 #define MaxSize 100 typedef int DataType; //栈的顺序存储定义 typedef struct { DataType data[MaxSize]; int top; }Stack; //栈的初始化 Stack *Init_Stack() { Stac

数据结构复习【第三章】 栈

(1)掌握栈的相关概念.特点和基本操作(入栈.出栈.判栈空.获取栈元素等). 栈:限制只能在表的一端进行插入和删除的线性表. 允许插入和删除的一端,称为栈顶(top). 不允许插入和删除的另一端,称为栈底(bottom). 把一个元素从栈顶放入栈中的操作,称为进栈.入栈或压栈 (push) 从栈顶取出一个元素的操作称为出栈或弹出(pop). 特点:后进先出 (2)掌握顺序栈.链栈.共享栈的实现. 顺序栈: 基本操作: 创建: { base = new T[m]: if (base = = NUL

【自考】数据结构第三章,栈、队列、数组,期末不挂科指南,第3篇

学习目标 自考重点.期末考试必过指南,这篇文章让你理解什么是栈.什么是队列.什么是数组 掌握栈.队列的顺序存储结构和链式存储结构 掌握栈.队列的基本操作在顺序存储结构和链式存储结构上的实现 掌握矩阵的压缩存储 今天核心咱们先把栈搞清楚 栈和队列可以看做是特殊的线性表 .它们的特殊性表现在它们的基本运算是线性表运算的子集,它们是运算受限的线性表 栈 栈(Stack)是运算受限的线性表,这种线性表上的插入和删除操作限定在表的一端进行 基本概念 栈顶:允许插入和删除的一端 栈尾:另一端 空栈:不含任何

浙大《数据结构》第三章:树(上)

注:本文使用的网课资源为中国大学MOOC https://www.icourse163.org/course/ZJU-93001 查找 查找:根据某个给定的关键字K,从集合R中找出关键字与K相同的记录. 静态查找:集合中的记录是固定的,没有插入删除的操作,只有查找: 动态查找:集合中记录是动态变化的,除查找,还可能发生插入和删除. 静态查找 方法1:顺序查找 int SequentialSearch( StaticTable *Tbl, ElementType K) { //在表Tbl[1]~T

数据结构之第三章之队列

1--队列的特点:队列是限定仅在表尾进行插入和表头进行删除操作的线性表,是先进先出的线性表. 1--循环队列 (1)循环队列的循环表示 typedef struct { int *base;//初始化的动态分配存储空间 int front;//头指针,若队列不为空,指向队列头元素 int rear;//尾指针,若队列不空,指向队列尾元素的下一个位置 }QUEUE; 若队列不空,尾指针始终指向队列尾元素的下一个位置,也即尾指针始终是"空闲的“,可以起到分隔作用. 2---入队 int enqueu

数据结构期末复习第三章栈和队列

第三章:栈和队列 栈的特性:后进先出(LIFO) 1.  输入序列为ABC,可以变为CBA时,经过的栈操作为( B )A. push, pop, push, pop, push, popB. push, push, push, pop, pop, popC. push, push, pop, pop, push, popD. push, pop, push, push, pop, pop 解析: ABC经过push,push,push操作后,从栈顶到栈底元素为CBA,经过pop,pop,pop出

【知识强化】第三章 栈和队列 3.1 栈

在第三章我们将继续学习三种非常重要的线性结构,分别是栈和队列的这样的受限线性表.我们将从它们的基本概念.存储结构以及相关应用这三方面进行详细的学习.最后我们将学习数组的相关知识,大家要注意一下这里的数组指的是一种线性结构,与我们之前在程序设计语言当中提到的数组类型是不同的概念.好,数组我们会学习它的定义以及它的存储结构,还有用数组来实现矩阵的压缩存储.最后还会提一个特殊的矩阵叫做稀疏矩阵.好,这就是本章所要学习的重要考点.本章所学习的知识点其实并不难,它常常出现在选择题当中,但是在之后我们解决一

javascript数据结构和算法 第一章(编程体验)三

变量作用域 变量作用域就是指在一个程序中,变量的值在哪里可以被获取到.javascript函数作用域被定义为函数作用域,这意味着变量的值在定义和声明该变量的函数,包括任何在该函数的嵌套函数里是可见的. 当一个变量定义在函数的外面,在主程序中,该变量将会拥有全局作用域.这就意味着它的值可以被程序的任何地方,包括函数获取. 下面的小程序演示全局变量时如何工作的. function showScope() { return scope; } var scope = "global"; pri