栈和队列
作业写不完的卑微小cookie
你连夜都不熬,那你熬什么,奥利给吗?
展开
-
队列相关习题
1.已知循环队列存储在一维数组A0…n-1]中,且队列非空时front和rear分别指向队头元素和队尾元素。若初始时队列为空,且要求第一个进入队列的元素存储在A[0]处,则初始时front和rear的值分别是( )。A.0,0B. 0,n-1C. n-1, 0D. n-1,n-12.循环队列存储在数组A[0…n]中,入队时的操作为( )。A. rear=rear+1B. rear= (rear+1) mod (n-1)C. rear= (rear+1) mod nD. rear= (rea原创 2020-08-07 14:17:47 · 2616 阅读 · 0 评论 -
利用两个栈S1,S2来模拟一个队列
利用两个栈S1,S2来模拟一个队列一、【问题描述 】利用两个栈S1,S2来模拟一个队列,已知栈的4个运算定义如下:Push(S,x);//元素x入栈Pop(S,x) ;//S出栈并将出栈的值赋给xStackEmpty(S) ;//判断栈是否为空StackOverflow(S) ;// 判断栈是否满如何利用栈的运算来实现该队列的3个运算(形参根据要求自己设计)?Enqueue ;//将元素x入队Dequeue ;//出队,并将出队元素存储在x中QueueEmpty;/ /判断队列是否为空原创 2020-08-07 14:11:38 · 4766 阅读 · 1 评论 -
使循环队列中的元素都能得到利用的算法
一、【问题描述】若希望循环队列中的元素都能得到利用,则需设置一个标志域tag,并以tag的值为0或1来区分队头指针front和队尾指针rear相同时的队列状态是“空”还是“满”。试编写与此结构相应的入队和出队算法。二、【问题解答】(1)入队算法//入队算法 int EnQ(SqQueue &Q,Elemtype x){ if(Q.front==Q.rear&&Q.tag==1)return 0; Q.data[Q.rear]=x; Q.rear=(Q.rear+1原创 2020-08-07 13:43:32 · 2365 阅读 · 0 评论 -
栈相关试题
1.向一个栈顶指针为top的链栈中插入一个x结点,则执行()A.top->next=xB. x->next=top- > next; top->next=xC.x- >next=top; top=xD.x- >next=top,top=top- >next2.链栈执行Pop操作,并将出栈的元素存在x中,应该执行( )。A.x=top; top=top->nextB. x=top- >dataC.top=top- >next ;x=t原创 2020-08-07 10:56:14 · 3987 阅读 · 2 评论 -
数据结构——栈相关知识以及思维导图
一、栈的基本概念ps:二、栈的顺序存储实现1.顺序栈的定义//顺序栈的定义#define MaxSize 10typedef struct{ Elemtype data[MaxSize]//静态数组存放栈中元素 int top;//栈顶指针 }SqStack; 2.初始化操作①top=-1的情况void InitStack(SqStack &S){ S.top=-1;}②top=0的情况void InitStack(SqStack &S){ S.t原创 2020-08-03 17:15:51 · 1018 阅读 · 0 评论 -
用不带头结点的单链表存储链栈,设计初始化栈、判断栈是否为空、进栈和出栈等相应的算法
一、问题描述用不带头结点的单链表存储链栈,设计初始化栈、判断栈是否为空、进栈和出栈等相应的算法二、问题分析不带头结点的单链表lst为空的条件是lst=NULL,进栈和出栈操作都是在表头进行的三、问题解答void initStack(LNode *&lst){//初始化栈 lst=NULL;}int isEmptyl(LNode *lst){//判断栈是否为空 if(lst==NULL) return 1; else return 0;}void pushl(LNode *原创 2020-08-03 09:20:43 · 1385 阅读 · 1 评论 -
数据结构——顺序队(循环队列,链队)
顺序队一、循环队列1.循环队列在顺序队中,通常让队尾指针rear指向刚进队的元素位置,让队首指针front指向刚出队的元素位置。因此,元素进队的时候,rear 要向后移动;元素出队的时候,front 也要向后移动。这样经过一系列的出队和进队操作以后,两个指针最终会达到数组末端maxSize-1处。虽然队中已经没有元素,但仍然无法让元素进队,这就是所谓的“假溢出”。要解决这个问题,可以把数组弄成一个环,让rear和front沿着环走,这样就永远不会出现两者来到数组尽头无法继续往下走的情况,这样就产生了循原创 2020-08-03 11:05:27 · 2432 阅读 · 0 评论 -
共享栈和双端队列
共享栈和双端队列一、共享栈相比于普通的顺序栈,共享栈主要是为了提高内存的利用率和减少溢出的可能性而设计的。为了增加内存空间的利用率和减少溢出的可能性,当两个栈共享一篇连续的内存空间时,应将两栈的栈底分别设在这片内存空间的两端,这样当两个栈的栈顶在栈空间的某一位置相遇时,才产生上溢。二、双端队列双端队列是一种插入和删除操作在两端均可进行的线性表,可以把双端队列看成栈底连在一起的两个栈。他们与两个栈共享存储空间的共享栈的不同指出是,两个栈的栈顶指针式向两端延伸的。由于双端队列允许在两端插入和删除元素,原创 2020-08-03 13:12:45 · 1271 阅读 · 0 评论 -
栈的存储结构、算法与应用
栈的存储结构、算法与应用一、相关结构体定义1.顺序栈定义typedef struct{ int data[maxSize]; int top;}SqStack;2.链栈结点定义typedef struct LNode{ int data; struct LNode *next; }LNode;二、顺序栈1.顺序栈的要素对于顺序栈st, 一共有4个要素,包括两个特殊状态和两个操作。(1)几个状态1)栈空状态。st.top==-12)栈满状态。st.top=maxSiz原创 2020-07-28 16:17:10 · 455 阅读 · 0 评论 -
栈和队列的基本概念
栈和队列的基本概念一、 栈的基本概念1.栈的定义栈是一种只能在一端进行插入或删除操作的线性表。其中允许进行插入或删除操作的一端称为栈顶(Top)。栈项由一个称为栈顶指针的位置指示器(其实就是一个变量,对于顺序栈,就是记录栈项元素所在数组位置标号的一个整型变量:对于链式栈,就是记录栈顶元素所在结点地址的指针)来指示,它是动态变化的。表的另一端称为栈底,栈底是固定不变的。栈的插入和删除操作一般 称为入栈和出栈。2.栈的特点由栈的定义可以看出,栈的主要特点就是先进后出(FILO)。栈中的元素就好比开进原创 2020-07-26 16:41:29 · 1882 阅读 · 0 评论