DC 15 順序佇列

2021-08-04 09:51:30 字數 2710 閱讀 6590

編寫可移植靈活性好的目標可以使我們的工作很輕鬆。。比如,出現滿螢幕的bug的時候。。我們會比電腦先崩潰,所以,今天我們學了編寫乙個檔案利用返回進行判斷錯誤的種類,這樣,可以有針對性的解決bug。。以後很方便的使用,這只是乙個工作的積累,檔案還需要很多新增和修改。

error的標頭檔案:

#ifndef __error_h__

#define __error_h__

#include #define error -1

#define full_stack -2

#define empty_stack -3

#define malloc_error -4

#define full_queue -5

#define empty_queue -6

int errno; // 錯誤號

void myerror(char *str);

char* mystrerror(int num);

#endif // __error_h__

error的c檔案:

#include "error.h"

void myerror(char *str)

char* mystrerror(int num)

}

下面便是順序佇列的檔案

標頭檔案:

#ifndef __sqqueue_h__

#define __sqqueue_h__

#include "error.h"

#define size 10

#define false 0

#define true 1

typedef int queuedata;

typedef struct _queue

queue;

//置空隊

int initqueue (queue *q);

//判斷空否

int queueempty (queue *q);

//判斷滿否

int queuefull (queue *q);

//進隊

int enqueue (queue *q, queuedata x);

//出隊

int dequeue (queue *q, queuedata *x);

//取對頭

int getfront (queue *q, queuedata *x);

函式呼叫寫在一起:

#include "sqqueue.h"

#include #include int initqueue (queue *q)

q ->front = 0; //置空

q ->rear = 0;

return true; }

int queueempty (queue *q)

return q->front == q->rear;

}int queuefull (queue *q)

return q->front == (q->rear + 1) % size;

}int enqueue (queue *q, queuedata x)

if (queuefull(q))

q->rear = (q->rear + 1) % size;

q->data[q->rear] = x;

return true; }

int dequeue (queue *q, queuedata *x)

if (queueempty(q))

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

*x =q->data[q->front];

return true;

}int getfront (queue *q, queuedata *x)

if (queueempty(q))

int index = (q ->front + 1) % size;

*x =q->data[index];

return true;

}

主函式:

#include "sqqueue.h"

#include int main()

int i;

char str[50];

for (i = 0; i < 10; i++) }

int x;

for (i = 0; i < 10; i++)

printf ("x = %d\n", x); }

return 0;

}

佇列:

(1)佇列先進先出。

(2)順序佇列搞清楚front和rear指標是幹什麼的。

佇列就像乙個可以迴圈回頭的陣列,front指標指向的位置是不可以存資料的,經過的位置都是被刪除的,rear進過的都是存資料的。這樣就可以保證先進先出。

(3)如何在陣列的末尾讓兩個指標回頭。可以用求餘的方法。比如,乙個長度為7的陣列,當指向下標為6的時候用(f+1)%7就是第乙個元素((6+1)%7 = 0   剛好下邊為0回到第乙個)。

(4)定義兩個指標,如何判斷空隊滿佇列以及其他問題。當f == r時為空,當(r+1)% len == f為滿佇列。滿佇列無法進隊資料。其他和上些篇的鍊錶相同。

佇列 順序佇列

建立順序佇列結構必須為其靜態分配或動態申請一片連續的儲存空間,並設定兩個指標進行管理。乙個是隊頭指標front,它指向隊頭元素 另乙個是隊尾指標rear,它指向下乙個入隊元素的儲存位置。typedef struct queue queue,pqueue queue.h整體結構 typedef int...

迴圈佇列 順序佇列

在前兩篇中講述了順序佇列中的隊頭移動與不移動兩種順序佇列,今天討論順序佇列中的迴圈佇列,這種迴圈佇列是用一維陣列實現的。在隊頭移動的情況下,根據元素個數與佇列容量之間的數量關係來解決假溢位問題。從上圖中我們可以理解為什麼這種佇列結構可以解決假溢位問題,但是隨之而來,我們要如何判定迴圈佇列已滿呢?在此...

佇列 順序迴圈佇列

順序佇列 sequence queue 用一片連續的儲存空間來儲存佇列中的資料元素.用一維陣列來存放順序佇列中的資料元素。隊頭位置設在陣列下標為 0 的端,用 front 表示 隊尾位置設在陣列的另一端,用 rear 表示。front 和 rear 隨著插入和刪除而變化。當隊列為空時,front r...