#include <iostream>
using namespace std;
//#define STACK_INIT_SIZE 100 //存储空间初始分配量
//#define STACKINCREMENT 10 //存储空间分配增量
const int STACK_INIT_SIZE = 100;
const int STACKINCREMENT = 10;
//-----单链队列一队列 的链式存储结构-----
typedef struct QNode
{
int data ;
struct QNode *next;
} QNode,*QueuePtr;
typedef struct
{
QueuePtr front; // 队头指针
QueuePtr rear; //队尾指针
} LinkQueue;
int InitQueue(LinkQueue &Q) //*3.2.1构造一个空队列Q
{
Q.front = Q.rear = (QueuePtr)malloc(sizeof(QNode));
if (!Q.front)
return 0;
Q.front->next=NULL;
return 1;
}
int DestroyQueue(LinkQueue &Q) // 销毁队列Q
{
while(Q.front)
{
Q.rear = Q.front->next;
free (Q.front) ;
Q.front=Q.rear;
}
return 1;
}
int EnQueue(LinkQueue &Q, int e)//*3.2.2插入元素e为Q的新的队尾元素
{
QueuePtr p = (QueuePtr)malloc(sizeof(QNode));
if (!p)
return 0;//存储分配失败
p->data = e;
p->next = NULL;
Q.rear->next = p;
Q.rear = p;
return 1;
}
int DeQueue(LinkQueue &Q, int &e)//*3.2.3若队列不空,则删除Q的队头元素,用e返回其值,并返回0K;
//否则返回ERROR
{
if (Q.front == Q.rear)
return 0;
QueuePtr p = Q.front->next;
e = p->data;
Q.front->next = p->next;
if (Q.rear == p) Q.rear = Q.front;
free (p);
return 1;
}
int main()
{
LinkQueue Q;
InitQueue(Q);
for(int i=0; i<10; i++)
{
EnQueue(Q,i+1);
}
for(int i=0; i<10; i++)
{
int e;
DeQueue(Q, e);
printf("%d\n", e);
}
return 0;
}
3.2数据结构书上可运行代码——队列
猜你喜欢
转载自blog.csdn.net/weixin_42137874/article/details/107719097
今日推荐
周排行