鏈式儲存的佇列

lookfd發表於2020-10-11

今天由於一些事情耽誤了,本來可以寫得更多的,但是卻只完成了一部分,那就從下週開始加快進度吧。

對於鏈式的佇列,我們需宣告一個頭指標和尾指標front和rear,當進隊的時候,我們就用尾插法插進連結串列,當出隊的時候,我們就從頭開始出。

下面就是相關的程式碼,由於今天的一些事情耽誤了(懶才是最重要的原因),所以就沒有打,若有看不懂的,可以在評論區評論。

typedef struct SNode {
int data;
struct SNode *next;
}*queue;

typedef struct QNode{
queue front;
queue rear;
}*Queue;

Queue Create ();
void En (Queue q,int x);
int De (Queue q);
int IsEmpty (Queue q);

int main ()
{
Queue q = Create();
int i;
for(i= 1;i < 6;i++){
En(q,i);
}
for(i = 0;i < 4;i++){
printf("%d ",De(q));
}

}

int IsEmpty (Queue q)
{
return (q->front == q->rear);
}
int De (Queue q)
{
if(IsEmpty(q)) {//若滿就不能刪除。
printf("The queue is empty!");
return -1;
}else {
queue p;
p = q->front->next;//從隊頭依次出隊。
q->front = q->front->next;
return (p->data);
}
}
void En (Queue q, int x )
{
queue p = (queue)malloc(sizeof(struct SNode));
p->data = x;
p->next = NULL;
q->rear->next= p;//利用尾指標插入q。
q->rear= p;//插入後,尾指標再指向隊尾。
}

Queue Create ()
{
Queue q = (Queue)malloc(sizeof(struct QNode));
q->front = q->rear = (queue)malloc(sizeof(struct SNode));
q->front->next = NULL;

return q;
}

函式的名字等等設計得不怎麼好,以後我會慢慢修改方面得錯誤。

今天就寫到這裡吧,還有一些任務未完成,全堆到一起了,看來下面今天不怎麼輕鬆,加油,期待下一次!

相關文章