队列
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);
}
#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);
}
相关文章推荐
- 线程同步
- JVM系列4:JVM总结
- 20145311 实验一 "Java开发环境的熟悉"
- 科技漫谈——无人机
- TCP/IP卷一(第二章学习)
- 详解网络流量监控
- JVM系列3:虚拟机类加载机制
- JVM系列2:垃圾收集器与内存分配策略
- Centos安装NodeJs 二进制文件方法
- 结对编程--四则运算
- POJ-2082 Terrible Sets (单调栈)
- 数据库的灵活操作
- Unable to get package info for [包路径]; is package not installed
- HDU 1253
- 消息队列通讯
- 多线程程序设计
- 如果时间不够 ,无法进行充分的测试怎么办?
- 由于没有详细了解Timestamp和Date之间的关系犯的错
- HDU 1159 && POJ 1458
- 20145227 《Java程序设计》第6周学习总结