您的位置:首页 > 其它

队列

2016-04-10 15:48 295 查看
注意:头结点不是用来存放数据的,而是为了操作方便人工添加的。

#include<stdio.h>

#include<iostream>

using namespace std; //因为该头结点不是用来存放数据的,而是为了

//操作方便人工添加的。

typedef char ElemType;

typedef struct QNode {

ElemType data;

struct QNode* next;

};

typedef struct LinkQueue {

QNode* front;

QNode* reat;

};

void initQueue(LinkQueue*q)

{

q->front = q->reat = (QNode*)malloc(sizeof(QNode));

if (!q->front) cout << "initQueue failed" << endl;

q->front->next = NULL;

}

void EnQueue(LinkQueue*q, ElemType e)

{

QNode*p;

p = (QNode*)malloc(sizeof(QNode));

p->data = e;

p->next = NULL;

q->reat->next = p;

q->reat = p;

}

void DeQueue(LinkQueue*q, ElemType*e)

{

QNode*p;

if (q->front == q->reat)return;

p = q->front->next;

*e = p->data;

q->front->next = p->next; //因为该头结点不是用来存放数据的,而是为了

//操作方便人工添加的

//如果写成q->front = p; 只能删除第一个元素。

if (q->reat == p)q->reat = q->front;

free(p);

}

void DestroyQueue(LinkQueue*q)

{

while (q->front)

{

q->reat = q->front->next;

free(q->front);

q->front = q->reat;

}

cout << "destroy" << endl;

}

void main()

{

ElemType e;

LinkQueue q;

initQueue(&q);

cout << "input string" << endl;

cin >> e;

while (e!='#')

{

EnQueue(&q, e);

cin >> e;

}

cout << "the string into the quene" << endl;

while (q.front!=q.reat)

{

DeQueue(&q, &e);

cout << e;

}

cout << endl;

DestroyQueue(&q);

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: