您的位置:首页 > 理论基础 > 数据结构算法

链队列的基本操作

2017-04-28 09:33 90 查看
C++链队列的基本操作

#include<iostream>
using namespace std;

typedef int QueueElementType;

typedef struct Node
{
QueueElementType data;
struct Node *next;
}LinkQueueNode;

typedef struct
{
LinkQueueNode *front;
LinkQueueNode *rear;
}LinkQueue;

void Initqueue(LinkQueue &Q);
void Input(LinkQueue &Q);
void Output(LinkQueue Q);
bool Isempty(LinkQueue Q);
void Enqueue(LinkQueue &Q, QueueElementType e);
void Delqueue(LinkQueue &Q, QueueElementType &e);
void Gethead(LinkQueue Q, QueueElementType &e);
void Clear(LinkQueue &Q);
void Interface();

int main()
{
Interface();
LinkQueue Q;
Initqueue(Q);
int n;
while (1)
{
cout << "请输入操作序号:";
cin >> n;
switch (n)
{
case 1:
{
cout << "请依次输入数据,并以-1作为结束标记:" << endl;
Input(Q);
break;
}
case 2:
{
cout << "队列中的元素:" << endl;
Output(Q);
break;
}
case 3:
{
if (Isempty(Q))
{
cout << "队列为空!" << endl;
}
else
{
cout << "队列不为空!" << endl;
}
break;
}
case 4:
{
QueueElementType e;
cout << "请输入入队列元素:";
cin >> e;
Enqueue(Q, e);
break;
}
case 5:
{
QueueElementType e;
Delqueue(Q, e);
cout << "元素" << e << "已出队列!" << endl;
break;
}
case 6:
{

QueueElementType e;
Gethead(Q, e);
cout << "队头元素为:" << e << endl;
break;
}
case 7:
{
Clear(Q);
break;
}
case 0:
{
exit(0);
break;
}
default:
{
cout << "输入的操作序号不正确!请核对..." << endl;
}
}
}
return 0;
}

void Initqueue(LinkQueue &Q)
{
Q.front = new LinkQueueNode;
Q.rear = Q.front;
Q.front->next = NULL;
}

void Input(LinkQueue &Q)
{
int e;
while (1)
{
cin >> e;
if (e == -1)
{
break;
}
Enqueue(Q, e);
}
}

void Output(LinkQueue Q)
{
if (Isempty(Q))
{
cout << "队列为空!" << endl;
exit(1);
}
LinkQueueNode *q = Q.front->next;
while (q)
{
cout << q->data << " ";
q = q->next;
}
cout << endl;
}

bool Isempty(LinkQueue Q)
{
if (Q.front->next == NULL)
{
return true;
}
else
{
return false;
}
}

void Enqueue(LinkQueue &Q, QueueElementType e)
{
LinkQueueNode *q = new LinkQueueNode;
q->data = e;
q->next = NULL;
Q.rear->next = q;
Q.rear = q;
}

void Delqueue(LinkQueue &Q, QueueElementType &e)
{
if (Isempty(Q))
{
cout << "队列为空!" << endl;
exit(1);
}
LinkQueueNode *q;
q = Q.front->next;
Q.front->next = q->next;
if (Q.rear == q)
{
Q.rear = Q.front;
}
e = q->data;
delete q;
}

void Gethead(LinkQueue Q, QueueElementType &e)
{
if (Isempty(Q))
{
cout << "队列为空!" << endl;
exit(1);
}
e = Q.front->next->data;
}

void Clear(LinkQueue &Q)
{
if (Isempty(Q))
{
cout << "队列为空!" << endl;
exit(1);
}
LinkQueueNode *p, *q;
Q.rear = Q.front;
p = Q.front->next;
Q.front->next = NULL;
while (p)
{
q = p;
p = p->next;
delete q;
}
}

void Interface()
{
cout << "***************欢迎使用链队列系统*******
4000
********" << endl;
cout << "1:输入队列                  2:输出队列" << endl;
cout << "3:判断队列是否为空          4:入队列" << endl;
cout << "5:出队列                    6:取队头元素" << endl;
cout << "7:清空队列                  0:退出" << endl;
cout << "*************************************************" << endl;
cout << "输入0-7之间的数:" << endl;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息