/* 链表队列操作集 */
#include<stdio.h>
#include<stdlib.h>
typedef int ElemnetType;
typedef struct Node{
ElemnetType Data;
struct Node *Next;
}*List;
typedef struct QNode{
List rear; //队尾指针始终指向单链表尾节点
List front;//队头指针始终指向单链表头节点
}*Queue;
Queue CreateQueue(); //建立队列
void Enqueue(ElemnetType ch,Queue Q);//入对列
ElemnetType TopElementOfQueue(Queue Q);//取队头元素
void DelQueue(Queue Q);//出队列
int main()
{
Queue PtrQ;
PtrQ=CreateQueue();
for(int i=0;i<10;i++){
Enqueue(i,PtrQ);
}
printf("Top %d\n", TopElementOfQueue(PtrQ));
system("pause");
return 0;
}
Queue CreateQueue()
{
Queue Q;
Q = (Queue)malloc(sizeof(struct QNode));
if(Q==NULL) return NULL;
Q->front=Q->rear=NULL;
return Q;
}
/* 无表头链表
元素ch入队,队尾插入
*/
void Enqueue(ElemnetType ch,Queue Q)
{
List temp;
temp=(List)malloc(sizeof(struct Node));
temp->Data=ch;
temp->Next=NULL;
if(Q->rear==NULL){
Q->rear=Q->front=temp;
}else{
Q->rear->Next=temp;
Q->rear=temp;
}
}
ElemnetType TopElementOfQueue(Queue Q)
{
if(Q->front!=Q->rear) //队列不为空
return Q->front->Next->Data;
}
/* 队列出队,队头删除 */
void DelQueue(Queue Q)
{
List temp;
ElemnetType ch;
if(Q->front=NULL){
printf("the Queue is empty.\n");
return;
}else{
temp=Q->front;
if(Q->front==Q->rear){
Q->front=Q->rear=NULL; //仅有一个元素
}else{
Q->front=Q->front->Next;//多个元素
}
ch=temp->Data;
free(temp);
}
}
网友评论