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

链队列的初始化、入队、出队及打印(数据结构)

2017-07-24 20:27 295 查看
#define _CRT_SECURE_NO_WARNINGS
#include<iostream>
#include<stdio.h>

#define OK 1
#define ERROR 0
typedef int Status;
typedef int QElemType;

using namespace std;

typedef struct QNode //结点结构
{
QElemType data;
struct QNode *next;
}QNode,*QueuePtr;

typedef struct //队列的链表结构
{
QueuePtr front, rear;//队头、队尾指针
}LinkQueue;

//队列的初始化
Status InitQueue(LinkQueue &Q)
{
Q.front = Q.rear = (QueuePtr)malloc(sizeof(QNode));
if (!Q.front) return ERROR;
Q.front->next = NULL;
return OK;
}

//入队操作
Status EnQueue(LinkQueue &Q, QElemType e)
{
QueuePtr p = (QueuePtr)malloc(sizeof(QNode));
if (!p)//若内存分配失败
return ERROR;
p->data = e;
p->next = NULL;
Q.rear->next = p;
Q.rear = p;
return OK;
}

//出队操作,将出队的数据存储到e中
Status DeQueue(LinkQueue &Q, QElemType &e)
{
QueuePtr p;
if (Q.front == Q.rear) return ERROR;
p = Q.front->next;
e = p->data;
Q.front->next = p->next;
if (Q.rear == p) Q.rear = Q.front;//若队头是队尾,则删除后将rear指向头结点
free(p);
return OK;
}

//打印队列
void PrintQueue(LinkQueue &Q)
{
QueuePtr p = Q.front->next;
while (p != NULL)
{
cout << p->data<<" ";
p = p->next;
}
}

void main()
{
LinkQueue Q;
InitQueue(Q);

cout << "请输入5个整型数据" << endl;
for (int i = 0; i < 5; i++)
{
int e;
cin >> e;
EnQueue(Q, e);
}
PrintQueue(Q);

//测试出队
int n;
DeQueue(Q, n);
cout <<endl<< "出队一个元素后的队列为:"<< endl;
PrintQueue(Q);
cout << "出队的数据为:" << n << endl;

system("pause");
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐