佇列 鍊錶實現

2022-03-03 05:05:12 字數 1884 閱讀 3041

佇列的鍊錶實現和佇列的陣列實現相比區別還是很大的.

首先我們需要2個指標frontrear, 分別指向頭節點和尾節點.

這兩個指標不屬於節點本身的資料, 因此我們把這個兩個指標單獨定義成乙個結構體.

因此, 佇列的鍊錶實現一共需要2個結構體, 乙個儲存佇列資料本身, 乙個儲存頭和尾指標.

createqueue()初始化函式中, 讓front指標指向null, 通過front指標已經足夠

判斷隊列為空的情況, 注意這裡不能初始化rear指標也等於null, 否則再指向入隊操作

時就會出現問題.

在入隊函式add()中, 首先根據front指標是否等於null來判斷佇列是否是初次插入元素.

在出隊函式del()中, 先判斷佇列是否為空.

c語言完整**實現如下:

#include #include struct queue ;

struct queuepointer ;

typedef struct queue node;

typedef struct queue* link;

typedef struct queuepointer pnode;

typedef struct queuepointer* pointer;

// 函式宣告

pointer createqueue (pointer p);

void add (pointer p, int x);

int del (pointer p);

void print (pointer p);

int main ()

print(qptr2);

del(qptr2);

del(qptr2);

del(qptr2);

print(qptr2);

/*複雜測試結束*/

/* 對頭隊尾指向同乙個節點測試開始 */

pointer qptr3 = createqueue(qptr);

add(qptr3, 666);

del(qptr3);

add(qptr3, 999);

print(qptr3);

/* 對頭隊尾指向同乙個節點測試結束 */

return 0;

}// 建立空佇列

pointer createqueue (pointer p)

// 入隊

void add (pointer p, int x)

p->rear->next = tmp;

p->rear = tmp;

}// 出隊

// 返回頭結點元素的值

int del (pointer p)

link tmp = p->front;

int tmpvalue = p->front->data;

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

free(tmp);

return tmpvalue;

}// 列印

void print (pointer p) else

printf("p->front->data = %d\n", p->front->data);

printf("p->rear->data = %d\n", p->rear->data);

printf("佇列的總長度為: %d\n", length);

}printf("\n\n");

}

佇列 鍊錶實現

1 rlc分割.cpp 定義控制台應用程式的入口點。2 3 4 include stdafx.h 5 include6 7 typedef char elemtype 8 9 typedef struct qnode qnode queueptr 13 14 typedef structlinkqu...

佇列(鍊錶實現)

鍊錶佇列 front 為隊頭指標 煉表頭節點 rear 為隊尾指標 include includetypedef struct list tlist t 要改變乙個變數的值,需要傳入變數的位址作引數 要改變乙個指標的值,需要傳入該指標的位址作引數 即指標的指標 void insertqueue li...

佇列(鍊錶實現)

1.思路 定義結構體node表示煉表裡的節點,結構體linklist表示鍊錶,選用兩個首尾指標進行基本操作。2.include using namespace std struct node struct linklist void create linklist list node tmp nod...