第三章:栈和队列3.1栈(stack)3.1.1栈的基本概念1.栈的定义
栈是特殊的线性表:==只允许在一端进行插入或删除操作==, 其逻辑结构与普通线性表相同;
栈顶(Top):允许进行插入和删除的一端 (最上面的为栈顶元素);
栈底(Bottom):固定的,不允许进行插入和删除的一端 (最下面的为栈底元素);
空栈:不含任何元素的空表;
特点:==后进先出==(后进栈的元素先出栈)(LIFO: Last In First Out)
缺点:栈的大小不可变,解决方法——共享栈;
2.栈的基本操作“创建&销毁”
InitStack(&S) 初始化栈:构造一个空栈S,分配内存空间;
DestroyStack(&S) 销毁栈:销毁并释放栈S所占用的内存空间;
“增&删”
Push(&S, x) 进栈:若栈S未满,则将x加入使其成为新==栈顶==;
Pop(&S, &x) 出栈:若栈S非空,则弹出(删除)==栈顶==元素,并用x返回;
“查&其他”
GetTop(S, &x) 读取栈顶元素:若栈 ...
教程想要实现打开页面之后自动做完题自动提交吗?
like this->
还能导出复习:
教程:
1.点击链接进入页面安装后填写我的邀请码:ACBDBDIJCE,我们都可以可以领取会员
https://www.daxuesoutijiang.com
2.点击链接中的按钮,下载搜题插件
3.解压插件 Zip 压缩包到固定位置(注意:解压后安装文件请勿删除)
4.打开Edge浏览器,访问edge://extensions/;
5.点击「加载解压缩的扩展」,选择刚刚已解压的插件文件夹(注意:是文件夹哦)
6.安装完成,在其他标签页刷新即可唤起插件
能自动检测到了
2-1 表达式转换分数 5
作者 DS课程组
单位 浙江大学
算术表达式有前缀表示法、中缀表示法和后缀表示法等形式。日常使用的算术表达式是采用中缀表示法,即二元运算符位于两个运算数中间。请设计程序将中缀表达式转换为后缀表达式。
输入格式:输入在一行中给出不含空格的中缀表达式,可包含+、-、*、/以及左右括号(),表达式不超过20个字符。
输出格式:在一行中输出转换后的后缀表达式,要求不同对象(运算数、运算符号)之间以空格分隔,但结尾不得有多余空格。
输入样例:12+3*(7-4)+8/4
输出样例:12 3 7 4 - * + 8 4 / +
初始化一个栈,用于保存暂时还不能确定运算顺序的运算符。从左到右处理各个元素,直到末尾。可能遇到三种情况:
遇到==操作数==: 直接加入后缀表达式。
遇到==界限符==: 遇到 ‘(’ 直接入栈; 遇到 ‘)’ 则依次弹出栈内运算符并加入后缀表达式,直到弹出 ‘(’ 为止。注意: ‘(‘ 不加入后缀表达式。
遇到==运算符==: 依次弹出栈中优先级高于或等于当前运算符的所有运算符,并加入后缀表达式,若碰到 ‘(’ 或栈空则停止。之后 ...
1-8 舞伴问题分数 3
作者 张瑞霞
单位 桂林电子科技大学
假设男士和女士的记录存放在一个数组中,设计算法实现舞伴配对,要求输出配对的舞伴,并输出没有配对的队头元素的姓名。
函数接口定义:1void DancePartner(DataType dancer[], int num) ;
其中 dancer[]是存放男士和女士信息的数组,num是数组大小。
裁判测试程序样例:12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394#include<stdio.h>#include<stdlib.h>typedef struct { char name[20]; char sex; } DataType;struct Node ...
1-7 另类循环队列分数 4
作者 DS课程组
单位 浙江大学
如果用一个循环数组表示队列,并且只设队列头指针Front,不设尾指针Rear,而是另设Count记录队列中元素个数。请编写算法实现队列的入队和出队操作。
函数接口定义:12bool AddQ( Queue Q, ElementType X );ElementType DeleteQ( Queue Q );
其中Queue结构定义如下:
123456789typedef int Position;typedef struct QNode *PtrToQNode;struct QNode { ElementType *Data; /* 存储元素的数组 */ Position Front; /* 队列的头指针 */ int Count; /* 队列中元素个数 */ int MaxSize; /* 队列最大容量 */};typedef PtrToQNode Queue;
注意:如果队列已满,AddQ函数必须输出“Qu ...
1-6 循环队列入队出队分数 4
作者 张瑞霞
单位 桂林电子科技大学
本题要求实现队列的顺序存储表示,包括入队、出队和取队头操作
函数接口定义:123void EnQueue_seq(SeqQueue squeue, DataType x) ;void DeQueue_seq(SeqQueue squeue) ;DataType FrontQueue_seq(SeqQueue squeue) ;
其中,squeue 是操作的队列,x是入队的元素
裁判测试程序样例:1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162#include <stdio.h>#include <stdlib.h>typedef char DataType;struct Queue{ int Max; int f; int r; DataType *elem; ...
1-5 带头结点的链队列的基本操作分数 4
作者 黄复贤
单位 菏泽学院
实现链队列的入队列及出队列操作。
函数接口定义:123Status QueueInsert(LinkQueue *Q,ElemType e);Status QueueDelete(LinkQueue *Q,ElemType *e);
其中 Q 和 e 都是用户传入的参数。 LinkQueue 的类型定义如下:
12345678910typedef int ElemType; typedef struct LNode{ ElemType data; struct LNode * next;}LNode,*LinkList;typedef struct { LinkList front,rear; /* 队头、队尾指针 */ }LinkQueue;
裁判测试程序样例:1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253 ...
1-4 在一个数组中实现两个堆栈分数 4
作者 陈越
单位 浙江大学
本题要求在一个数组中实现两个堆栈。
函数接口定义:123Stack CreateStack( int MaxSize );bool Push( Stack S, ElementType X, int Tag );ElementType Pop( Stack S, int Tag );
其中Tag是堆栈编号,取1或2;MaxSize堆栈数组的规模;Stack结构定义如下:
1234567typedef int Position;struct SNode { ElementType *Data; Position Top1, Top2; int MaxSize;};typedef struct SNode *Stack;
注意:如果堆栈已满,Push函数必须输出“Stack Full”并且返回false;如果某堆栈是空的,则Pop函数必须输出“Stack Tag Empty”(其中Tag是该堆栈的编号),并且返回ERROR。
裁判测试程序样例:123456789101112131 ...
1-3 用链栈实现将非负的十进制数转换为指定的进制数分数 3
作者 CUIT通信DS课程组
单位 成都信息工程大学
利用链序栈将输入的非负的十进制数N转换为指定的d(二、八或十六)进制数。
链栈的定义如下:
12345typedef struct SNode{ DataType data; // 数据域 struct SNode *next; // 指向后继结点的指针域}SNode,*LinkStack;
函数接口定义:1int DecimalConvert(LinkStack s, int dec, int scale);
函数参数说明:形参–s、dec、scale,其中,s是存放转换后的scale进制数的各位数字,dec 主函数输入的待转换的十进制数,scale是指定的数制(只能是2、8或16)。 函数返回值:1,表示函数执行完成;0,表示函数未成功执行。
裁判测试程序样例:12345678910111213141516171819202122232425262728293031323334353637383940414 ...
1-2 进制转换分数 4
作者 YJ
单位 西南石油大学
设计一个顺序栈,并利用该顺序栈将给定的十进制整整数转换为二进制输出。
函数接口定义:12Status SPush( SqStack &s,ElemType x);Status SPop( SqStack &s,int &e );
裁判测试程序样例:123456789101112131415161718192021222324252627282930313233343536373839404142434445#include <stdio.h>#include <stdlib.h>#define MaxSize 10#define OK 1#define ERROR 0typedef int Status;typedef int ElemType;typedef struct{ ElemType *data; //存储元素的数组 int top; //栈顶指针 int stacksize; //栈最大容量} ...


