#include<stdio.h>
#include <iostream>
using namespace std;
typedef struct Qnode {
int data;
struct Qnode *next;
} QNode, *QueuePtr; //一个结点变量,一个指针变量,pointer缩写Ptr
typedef struct {
QueuePtr front; //队头指针
QueuePtr rear; //队尾指针
} LinkQueue;
//初始化链队
bool InitQueue(LinkQueue &Q) {
Q.front = Q.rear = new QNode;
Q.front->next = NULL; //头结点指针域置空
return true;
}
//链队销毁
bool DestoryQueue(LinkQueue &Q) {
while (Q.front) {
QNode *p = Q.front->next;
delete Q.front;
Q.front = p;//或者写Q.rear=Q.front0->next;free(Q.front);Q.front=Q.rear;
}
return true;
}
//链队的入队
bool EnQueue(LinkQueue &Q, int e) {
QNode *p = new QNode;//指针p指向为入队元素分配的结点空间
p->data = e;
p->next = NULL;
Q.rear->next = p;
Q.rear = p; //这两步将新结点插入队尾
Q.rear = p; //修改队尾指针
return true;
}
//链队的出队
bool DeQueue(LinkQueue &Q, int &e) {
if (Q.front == Q.rear)
return false;
QNode *p = Q.front->next;//p指向队头元素
e = p->data;
Q.front->next = p->next;//修改头指针
if (Q.rear == p)
Q.rear = Q.front;//头结点下一结点就是尾结点时
delete p;
return true;
}
//取队头
int GetHead(LinkQueue Q) {
if (Q.front != Q.rear)//队列非空
return Q.front->next->data;//返回队头元素,队头指针不变
else {
return 0;
}
}
int main() {
LinkQueue Q;
cout << "链队的初始化:" << endl;
InitQueue(Q);
cout << "链队列创建成功" << endl;
cout << "链队列的入队" << endl;
int i = 0;
for (i = 0; i < 10; i++) {
//入队 0--9
EnQueue(Q, i);
}
cout << "链队入队成功" << endl;
cout << "取队头元素" << endl;
//int m=GetHead(Q);
cout << GetHead(Q) << endl;
cout << "链队出队" << endl;
for (i = 0; i < 10; i++) {
int k;
DeQueue(Q, k);
cout << k << " ";
}
//空行
cout << endl;
cout << "销毁链队" << endl;
DestoryQueue(Q);
cout << "链队销毁成功" << endl;
return 0;
}
06.链队的基本操作
最新推荐文章于 2023-11-27 16:18:49 发布