佇列 鍊錶與迴圈陣列實現

2021-06-25 21:13:54 字數 4061 閱讀 7144

如圖所示:

根據圖可以知道:

空的判斷條件: front 與 rear 都指向頭結點

實現**如下:

struct node;

struct queuerecord;

typedef struct node * ptrtonode;

typedef struct queuerecord * queue;

struct node

;struct queuerecord

;queue createqueue( );

void disposequeue( queue q );

int isempty( queue q );

void makeempty( queue q );

void enqueue( elementtype x, queue q );

void dequeue( queue q );

elementtype front( queue q );

elementtype frontanddequeue( queue q );

queue createqueue()

// 鍊錶棧中含有頭結點

q->front = q->rear = ( ptrtonode ) malloc( sizeof( struct queuerecord ) );

if ( q->front == null )

q->front->next = null;

return q;

}void disposequeue( queue q )

void enqueue( elementtype x, queue q )

else }

void dequeue( queue q )

else }

int isempty( queue q )

void makeempty( queue q )

while ( !isempty(q) )

dequeue( q );

}elementtype front( queue q )

else

return q->front->next->element;

}elementtype frontanddequeue( queue q )

else

}

對於迴圈陣列實現一般存在兩種判斷佇列空與滿的方法;

一種在表示佇列的結構體中設定乙個變數size,指示佇列中的元素個數;另一種依靠基準情形來判斷,即通過 rear 與 front 的關係;

1.設定變數size來判斷

rear:指向佇列中的最後乙個元素,先移動再插入元素

front:指向佇列中第乙個元素

空的判斷: size = 0

滿的判斷: size = capacity

初始化:

front = 1;

rear = 0;

**如下:

struct queuerecord;

typedef queuerecord *queue;

queue createqueue( int maxelements );

void disposequeue( queue q );

int isempty( queue q );

int isfull( queue q );

void makeempty( queue q );

void enqueue( elementtype x, queue q );

void dequeue( queue q );

elementtype front( queue q );

elementtype frontanddequeue( queue q );

struct queuerecord

;queue createqueue( int maxelements )

q->array = (elementtype *) malloc( sizeof(elementtype) * maxelements );

if ( q->array == null )

q->capacity = maxelements;

makeempty( q );

return q;

}void disposequeue( queue q )

}int isempty( queue q )

int isfull( queue q )

void makeempty( queue q )

static int succ( int value, queue q )

void enqueue( elementtype x, queue q )

else }

void dequeue( queue q )

else }

elementtype front( queue q )

else

return q->array[q->front];

}elementtype frontanddequeue( queue q )

else

return tmpcell;

}

2.以基準情況判斷方法

rear:指向佇列最後乙個元素的下乙個元素,先插入元素,再移動

front:指向佇列的第乙個元素

空的判斷: rear = front

滿的判斷: 在迴圈陣列中, front - 1 = rear

初始化: front = rear = 0

注意:假設實現陣列的大小為a.size,使用這種判斷方法只能儲存a.size - 1個元素

**如下:

struct queuerecord;

typedef queuerecord *queue;

queue createqueue( int maxelements );

void disposequeue( queue q );

int isempty( queue q );

int isfull( queue q );

void makeempty( queue q );

void enqueue( elementtype x, queue q );

void dequeue( queue q );

elementtype front( queue q );

elementtype frontanddequeue( queue q );

struct queuerecord

;queue createqueue( int maxelements )

q->array = (elementtype *) malloc( sizeof(elementtype) * maxelements );

if ( q->array == null )

q->capacity = maxelements;

makeempty( q );

return q;

}void disposequeue( queue q )

}int isempty( queue q )

int isfull( queue q )

void makeempty( queue q )

void enqueue( elementtype x, queue q )

else }

void dequeue( queue q )

else

q->front = ( q->front + 1 ) % q->capacity;

}elementtype front( queue q )

else

return q->array[q->front];

}elementtype frontanddequeue( queue q )

else

return tmpcell;

}

佇列的陣列實現與鍊錶實現

佇列是一種基本的資料結構。我們平時排隊等候服務的時候,是先到的人先接受服務。對於佇列這種資料結構,實現的就是一種先進先出 first int,first out,fifo 的策略。改變佇列中元素的操作方法只有兩個 push與pop。push是把元素從隊尾插入,pop是把元素從隊頭刪除。佇列的陣列實現...

資料結構 佇列,陣列實現 鍊錶實現和迴圈佇列

一 什麼是佇列 一種先進先出的資料結構 fifo結構 新元素新增在隊尾 push 刪除操作刪掉第乙個元素 pop 二 佇列的實現方式 佇列的實現方式陣列實現 鍊錶實現 三 常見的佇列 常用佇列迴圈佇列 阻塞佇列 併發佇列 四 怎麼實現乙個無bug的佇列思考 思考1 head 頭元素 和tail 尾元...

佇列(陣列實現和鍊錶實現)

1.概念 具有一定操作約束的線性表 2.特點 1 只能在一端插入 入隊 另一端刪除 出隊 2 先進先出。3.儲存實現方式 陣列 鍊錶。4.基本操作 1.陣列實現 迴圈陣列 注意 1 普通的順序儲存的陣列用來實現佇列時,存在乙個問題 當rear 記錄隊尾的變數 到達maxsize 1時,不能確定佇列是...