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();
}