第三章棧與佇列 3

2021-09-23 22:19:08 字數 1795 閱讀 5769

棧:先進後出,lifo;

佇列:先進先出,fifo;隊尾,rare,隊頭,front;

//佇列的抽象資料定義

adt queue

資料關係:r1 = {}

基本操作:初始化,銷毀,清空,判空, 求長度,獲得隊頭, 插入元素,刪除隊頭並返回,呼叫函式;

}adt queue

雙端佇列:端點1 , 端點2

受限的雙端佇列;

佇列的兩種表示:鏈佇列

鏈佇列的表示與實現:

typedef struct qnodeqnode , queue;

typedef struct lelemtype;

typedef lelemtype event;

typedef struct lnodelnode , * linklist;

typedef linklist eventlist;//

void banksimulation(int closetime); //銀行模擬

void openforday(); //開店

void closeforday(); //關店

int getmin(linkqueue q); //得到人最少的視窗

void customerarriving(int closetime); //預計使用者到來

void customerdeparture(int closetime); //使用者離開

/***** 鍊錶操作 ******/

void initlist(linklist *pl);

int listempty(linklist l);

void orderinsert(linklist *pl, lelemtype en);

void delfirst(linklist *pl, lelemtype *e);

/***** 佇列操作 ******/

void initqueue(linkqueue *q);

int delqueue(linkqueue *pq, qelemtype *e);

int enqueue(linkqueue *pq, qelemtype e);

int queuelength(linkqueue q);

int totaltime=0, customernum=0; //累計客戶逗留時間,客戶數

eventlist eventlist; //事件表

event event; //事件

customerqueue windows[windows_num+1]; //視窗,從1開始儲存

customer customer; //客戶記錄

int main()

//銀行模擬

void banksimulation(int closetime)

else

}closeforday(); }

//銀行開門,初始化

void openforday()

//void closeforday()

// **使用者到達事件

void customerarriving(int closetime)

}/******鍊錶操作***************/

// 有頭節點的單鏈表

void initlist(linklist *pl)

int listempty(linklist l)

void delfirst(linklist *pl , lelemtype *e)

第三章 棧與佇列 總結

棧 限定僅在表尾進行插入和刪除操作的線性表 棧的抽象資料型別定義 adt stack data 棧中元素具有相同型別及後進先出特性,相鄰元素具有前驅和後繼關係 operation initstack 前置條件 棧不存在 輸入 無 功能 棧的初始化 輸出 無 後置條件 構造乙個空棧 destroyst...

第三章 棧和佇列

棧和佇列 一 棧 1 棧的定義 棧是限定僅在表尾進行插入和刪除操作的線性表,允許插入和刪除的一端稱為棧頂,另一端稱為棧底,不含任何資料元素的棧稱為空棧。2 在任何時候出棧的元素都只能是棧頂元素,即最後最後入棧者最先出棧。所以棧中元素除了具有線性關係外,還具有後進先出的特性。3 棧的抽象資料型別定義 ...

第三章 棧和佇列

棧和佇列是兩種常用的資料結構,同時又是操作受限的線性表,也是兩種重要的抽象資料型別。1 1棧是限定僅在表尾進行插入和刪除操作的線性表。棧中元素具有線性關係和後進先出的特性。2雖然對插入和刪除操作的位置限制減少了棧的靈活性,但同時也使得棧的操作更有效更容易實現。3棧的儲存結構分兩種,一種是順序儲存結構...