#include<stdio.h>
#include<malloc.h>
#define N 100
typedef struct Qnode{//这是队列中的结点信息
int data;
struct Qnode *next;
}Qnode,*Qptr;//定义队列和头指针
//==Qnode *Qptr;
//接下来定义指针Qptr
Qptr p;//==>Qnode *p
typedef struct{//队列属性
Qptr front;//通过front找到整个队列
Qptr rear;
}Linkqueue;//指向整个队列
int InitQueue(Linkqueue &Q){//初始化
Q.front=Q.rear=(Qptr)malloc(sizeof(Qnode));//强制转换为Qptr指针类型
if(!Q.front) return 0;
Q.front->next=NULL;
}
int Gethead(Linkqueue Q,int e){//取队头
if(Q.front==Q.rear) return 0;
e=Q.front->next->data;//队头在头结点的后一个元素
}
void DestroyQueue(Linkqueue &Q){//销毁队列
while(Q.front){//不为空
p=Q.front->next;//指向首元素(头结点的后一个)
free(Q.front);
Q.front=p;//首元素后移
}//反正rear指针也没用,用它也行
return;
}
void EnQueue(Linkqueue &Q,int e){//入队e
p=(Qptr)malloc(sizeof(Qnode));
if(!p) return;//总是要看下分配成功没
p->data=e;
p->next=NULL;//开辟结点完成
Q.rear->next=p;//连接
Q.rear=p;//改变尾指针
}
void OutQueue(Linkqueue &Q,int &e){//出队e
if(Q.front==Q.rear) return;//如果队空返回
p=Q.front->next;
e=p->data;
Q.front->next=p->next;
if(Q.rear==p)//删除的如果是尾结点,那么两个一样
Q.rear=Q.front;
delete p;
return ;
}
int main()
{
return 0;
}
10-04
3729