简单的数据结构中队列的基本操作,希望对初学者有所帮助。
(个人认为还是挺详细的、且简明易懂,这是我学数据结构是老师布置实验报告作业)
#include<stdio.h>
#include<stdlib.h>
typedef struct QNode{
int data;
struct QNode * next;
}QNode, * Queueprt;
typedef struct {
Queueprt front; //队头指针
Queueprt rear; //队尾指针
}LinkQueue;
//构造空队列
void InitialQueue(LinkQueue &q){
q.front = q.rear = (Queueprt)malloc(sizeof(QNode));
if (!q.front) {
printf("分配空间失败!\n"); }
q.front->next = NULL;
printf("初始化成功!\n");}
//入队
void EnQueue(LinkQueue &q, int e){
Queueprt p = (Queueprt)malloc(sizeof(QNode));
if (!p) {
printf("分配空间失败!\n");}
p->data = e;
p->next = NULL;
q.rear->next = p;
q.rear = p;}
//出队
void DeQueue(LinkQueue &q){
QNode * p;
if (q.front==q.rear) {
printf("空队列!\n");}
p = q.front->next;
q.front->next = p->next;
if (q.rear == p) q.rear = q.front;
free(p);
printf("出队成功!\n");}
//输出队列
void show(LinkQueue &q){
QNode * p = q.front->next;
if (q.front==q.rear) {
printf("空队列!\n");}
while (p) {
printf("%d ", p->data);
p = p->next; }
printf("\n");}
int main(){
LinkQueue q;
int m;
InitialQueue(q);
int count;
int i = 0;
printf("请输入队列的大小:");
scanf("%d", &count);
printf("请输入队列元素:");
while (i++ < count) {
scanf("%d", &m);
EnQueue(q, m);}
printf("入队操作\n");
printf("请输入需要入队的元素:");
scanf("%d",&m);
EnQueue(q,m);
printf("该操作后队列为:");
show(q);
printf("出队操作\n");
DeQueue(q);
printf("输出队列为:");
show(q);
return 0;
}