【数据结构|数据结构实验三——栈和队列的基本操作】
栈和队列
- 一、实验内容
-
-
- 1.实验目的
- 2. 基本要求
- 3. 支撑的课程目标
-
- 二、实验过程
-
-
- 1. 顺序栈的建栈、入栈、出栈、取栈顶元素
- 1. 链栈的建栈、入栈、出栈、及取栈顶元素
- 3.循环队列的建立、入队、出队及取队头元素
- 4.链队的创建、入队、出队及取队头元素
-
一、实验内容 1.实验目的
- 编程实现顺序栈和链栈的基本操作:建栈,取栈顶元素,入栈,出栈;
- 编程实现循环队列和链队列的基本操作:建队列,取队头元素,入队,出队。
- 掌握栈的顺序存储结构、链式存储结构及其基本操作;
- 掌握队列的顺序存储结构、链式存储结构及其基本操作。
本实验项目可以支撑“目标1. 理解数据结构的基本概念、计算机内部数据对象的表示和特性。掌握线性表、树、图等数据逻辑结构、存储结构及其差异以及各种操作的实现。”、和“目标2能够针对实际问题选择合适的数据结构和方法设计出结构清晰、正确易读、复杂性较优的算法,同时掌握对算法进行时间、空间复杂度分析的基本技能。”。
本实验通过验证方式引导学生掌握顺序栈和链栈的基本操作,循环队列和链队列的基本 操作,为后续学习打下基础,以便更好地达成后续更高层次的课程目标。
二、实验过程 1. 顺序栈的建栈、入栈、出栈、取栈顶元素
/*
*title:顺序栈的基本操作
*writer:weiyuexin
*data:2020-10-11
*/#includeusing namespace std;
#define SElemType inttypedef struct{
SElemType *base;
//定义栈底指针
SElemType *top;
//定义栈顶指针
int stacksize;
}SqStack;
void InitStack(SqStack &S,int maxsize){//初始化栈
S.base = new SElemType[maxsize];
if(!S.base){
cout<<"创建栈失败!"<";
for(int i=0;
i.stacksize;
i++){
cout<<*S.base++<<" ";
if(!*S.base || S.top == S.base){
break;
}
}
cout<<"<=栈顶"<>operation){switch(operation){
case 0 :
cout<<"程序运行结束!"<>maxsize;
InitStack(S,maxsize);
cout<<"请输入对应数字选择操作:"<>e){
if(e == -1){
break;
}
Push(S,e);
}
cout<<"入栈成功!"<>m;
cout<<"出栈的元素为:"<后出)"<
1. 链栈的建栈、入栈、出栈、及取栈顶元素
/*
*title:链栈的基本操作
*writer:weiyuexin
*data:2020-10-11
*/#includeusing namespace std;
#define ElemType inttypedef struct StackNode{
ElemType data;
struct StackNode *next;
}StackNode,*LinkStack;
void InitStack(LinkStack &S){//初始化链栈
S = NULL;
cout<<"栈S初始化成功!"< ";
while(p){
coutnext;
}
cout<<" <=栈底"<data;
p = S;
S = S->next;
delete p;
return ee;
}void Push(LinkStack &S,ElemType e){//入栈
StackNode *p = new StackNode();
p ->data = https://www.it610.com/article/e;
p ->next = S;
S = p;
}int main(){
LinkStack S;
cout<<"实验3_2-------------------链栈的基本操作"<>operation){switch(operation){
case 0 :
cout<<"程序运行结束!"<>e){
if(e == -1){
break;
}
Push(S,e);
}
cout<<"入栈成功!"<>n;
cout<<"出栈的元素依次为: ";
for(int i=0;
i
3.循环队列的建立、入队、出队及取队头元素
/*
*title: 循环队列的基本操作
*writer:weiyuexin
*data:2020-10-11
*/#includeusing namespace std;
#define MAXSIZE 100
#define QElemType inttypedef struct{
QElemType *base;
//存储空间基地址
int front;
//头指针
int rear;
//尾指针
}SqQueue;
void InitQueue(SqQueue &Q){//初始化循环队列
Q.base = new QElemType[MAXSIZE];
if(!Q.base){
cout<<"队列初始化失败!"<";
for(int i=Q.front;
i>operation){
switch(operation){
case 0 :
cout<<"程序运行结束!"<>e){
if(e == -1){
break;
}
EnQueue(Q,e);
}
cout<<"入队成功!"<>n;
cout<<"出队的元素依次为: ";
for(int i=0;
i
4.链队的创建、入队、出队及取队头元素
/*
*title:链队的基本操作
*writer:weiyuexin
*data:2020-10-11
*/#includeusing namespace std;
#define QElemType inttypedef struct QNode{
QElemType data;
struct QNode *next;
}QNode,*QueuePtr;
typedef struct{
QueuePtr front;
//队头指针
QueuePtr rear;
//队尾指针
}LinkQueue;
void InitQueue(LinkQueue &Q){//初始化链队
Q.front = Q.rear = new QNode;
//生成新结点作为头结点,队头和队尾指针指向此节点
Q.front->next = NULL;
//头结点的指针域置空
cout<<"链队初始化成功!"<data = https://www.it610.com/article/e;
p->next = NULL;
Q.rear->next = p;
Q.rear = p;
}QElemType DeQueue(LinkQueue &Q){//出队
if(Q.front == Q.rear){
cout<<"该链队已空!"<next;
e = p->data;
Q.front->next = p->next;
if(Q.rear == p){
Q.rear = Q.front;
}
delete p;
return e;
}QElemType GetHead(LinkQueue Q){//取队首值
if(Q.front != Q.rear){//队列非空
return Q.front->next->data;
//返回队首值
}else{
cout<<"该链队为空!"<next;
cout<<"该链队为: 队首=> ";
while(p != NULL){
coutnext;
}
cout<<"<=队尾"<>operation){
switch(operation){
case 0 :
cout<<"程序运行结束!"<>n;
cout<<"请输入要入队的元素:"<>e;
EnQueue(Q,e);
}
cout<>m;
cout<<"出栈的元素依次为: ";
for(int i=0;
i
推荐阅读
- 数据结构与算法复习笔记——栈和队列
- 算法|YOLOv6(又快又准的目标检测框架开源啦)
- 数据结构|设计B+树(B+Tree)
- 操作系统|操作系统动态分区分配方式C/C++语言(首次适应算法(FF)循环首次适应算法(NF)最best适应算法(BF)最坏适应算法(WF))
- java|毕业两年,从月薪3500到现在的华为java工程师,我是这样提升自己的技术栈的。
- leetcode刷题|LeetCode 第63场双周赛复盘
- 《Java入门100练》|【第26天】给定 n 个元素的升序数组nums,求实现一个函数在nums中寻找target的下标 | 初识二分查找
- Leetcode|leetcode:第260场周赛复盘
- 《Java入门100练》|【第25天】给定一个长度为 n 的数组,统计每个数出现的次数 | 计数哈希