数据结构|数据结构实验三——栈和队列的基本操作

【数据结构|数据结构实验三——栈和队列的基本操作】
栈和队列

  • 一、实验内容
      • 1.实验目的
      • 2. 基本要求
      • 3. 支撑的课程目标
  • 二、实验过程
      • 1. 顺序栈的建栈、入栈、出栈、取栈顶元素
      • 1. 链栈的建栈、入栈、出栈、及取栈顶元素
      • 3.循环队列的建立、入队、出队及取队头元素
      • 4.链队的创建、入队、出队及取队头元素

一、实验内容 1.实验目的
  1. 编程实现顺序栈和链栈的基本操作:建栈,取栈顶元素,入栈,出栈;
  2. 编程实现循环队列和链队列的基本操作:建队列,取队头元素,入队,出队。
2. 基本要求
  1. 掌握栈的顺序存储结构、链式存储结构及其基本操作;
  2. 掌握队列的顺序存储结构、链式存储结构及其基本操作。
3. 支撑的课程目标
本实验项目可以支撑“目标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

    推荐阅读