【数据结构】宜宾大学-计院-实验五
实验五 栈和队列(队列的基本操作)
实验目的:
1.掌握队列的顺序存储结构和链式存储结构
2.实现队列的基本操作,包括队列的建立、入队列、出队列、判断队列是否空等
实验内容:
1.完成链队列的建立
2.实现链队列的入队操作
3.实现链队列的出队列操作
4.实现判断链队列是否为空
5.实现销毁链队列
6.自己设计一组数据,模拟入队列,出队列
链表结点结构:
typedef struct QNode
{
int data;
struct QNode *Next;
}QNode,*QueuePtr;
队列结构:
struct
{
QueuePtr front;
QueuePtr rear;
}Ptr;
实验结果:
每个同学都要记录实验结果(无论对与错),如果程序调试中有什么错误,记录并分析原因,必须另寻时间调试成功。
实验报告:(及时撰写实验报告)
答:代码有点挫,但能正确跑,遇到的问题都解决了
运行截图:

代码实现:
#include<iostream>#include<stdio.h>#include<stdlib.h>usingnamespace std;typedefint datatype;//节点成员变量的建立typedefstructQNode{ datatype data;structQNode* Next;}QNode,*QueuePtr;//匿名结构体,成员变量为队列首尾指针struct{ QueuePtr front =NULL; QueuePtr rear =NULL;}Ptr;//开辟一个新节点 QNode*BuyNode(datatype x){ QNode* newnode =(QNode*)malloc(sizeof(QNode));if(newnode ==NULL)returnNULL;else{ newnode->data = x; newnode->Next =NULL;}return newnode;}//初始化头节点voidInitHead(QueuePtr head){ head =BuyNode(0); Ptr.front = head; Ptr.rear = head;}//销毁链式队列voidDestroyQueue(QueuePtr head){ QueuePtr pcur = head;while(pcur){ QueuePtr next = pcur->Next;free(pcur); pcur = next;}}//队列插入元素的实现(即入队列)voidpush(datatype x){ QueuePtr node =BuyNode(x); Ptr.rear->Next = node; Ptr.rear = node;}//队列元素的删除(即头删)voidpop(){ QueuePtr del = Ptr.front->Next;if(del ==NULL)return;else{ QueuePtr next = del->Next; Ptr.front->Next = next;free(del); del =NULL;}}//判空boolEmptyQueue(){if(Ptr.front->Next ==NULL)returntrue;elsereturnfalse;}//获取队列首元素(即出队列) datatype GetHead(){if(Ptr.front->Next ==NULL)return0;elsereturn Ptr.front->Next->data;}//队列当前元素个数intSizeQueue(){int count =0; QueuePtr pcur = Ptr.front->Next;while(pcur){ count++; QueuePtr next = pcur->Next; pcur = pcur->Next;}return count;}intmain(){ QueuePtr head =NULL;InitHead(head);push(1);push(2);push(3);push(4);push(5);push(6);push(7);push(8); cout <<"队列中当前元素的个数:"<<SizeQueue()<< endl << endl; cout <<"依次输出队列中所有元素:"<< endl;while(!EmptyQueue()){ cout <<GetHead()<<" ";pop();} cout << endl << endl; cout <<"销毁队列:"<< endl;DestroyQueue(head); cout <<"销毁队列后队列中的元素个数:"<<SizeQueue();return0;}