1. 程式人生 > >c語言佇列的實現

c語言佇列的實現

typedef int QElemType;

typedef struct QNode //節點結構
{
QElemType data;
struct QNode *next;
}QNode,*QueuePtr;

typedef struct Link_queue//佇列的連結串列結構
{
QueuePtr front,rear; //佇列的頭、尾指標
}LinkQueue;


typedef int Status;

#define ERR_OK 0
#define ERR_NO 1

//入隊操作
Status Enqueue(LinkQueue* Q,QElemType e)
{
QueuePtr s = (QueuePtr)malloc(sizeof(QNode));

s->data = e;
s->next = NULL;

Q->rear->next = s;   //佇列的前一個元素的next指標指向新節點資料
Q->rear = s;      //佇列的尾指標向後移動至新節點
return ERR_OK;

}

//出隊操作
Status DeQueue(LinkQueue* Q,QElemType *e)
{
QueuePtr p;

p = Q->front->next; //要出隊的是頭結點的下一個節點
*e = p->data; //將要出隊的節點資料賦值給e

Q->front->next = p->next;

if(Q->rear == p) //尾指標指向p說明佇列空了
{
Q->rear = Q->front;
}

free(p);
return ERR_OK;
}


void main(void)
{
QueuePtr s = (QueuePtr)malloc(sizeof(QNode));

s->data = 0;
s->next = NULL;

LinkQueue linkqueue;

linkqueue.front = s;
linkqueue.rear = s;

Enqueue(&linkqueue,1);
Enqueue(&linkqueue,2);
Enqueue(&linkqueue,3);
Enqueue(&linkqueue,4);
Enqueue(&linkqueue,5);

QElemType value;
QElemType value1;
QElemType value2;
QElemType value3;

DeQueue(&linkqueue,&value);

DeQueue(&linkqueue,&value1);

DeQueue(&linkqueue,&value2);

DeQueue(&linkqueue,&value3);


//LinkList linklist;

//CreateListTail(&linklist,5);

//ListInsert(&linklist,3,2);

getchar();
}