資料結構 第三章 棧和佇列

2021-09-07 19:35:01 字數 3464 閱讀 1151

目錄

3.1 堆疊的基本概念

3.2 堆疊的順序儲存結構

一、構造原理

二、**實現

三. 多棧共享連續空間問題

3.3 堆疊的鏈式儲存結構

一.構造原理

二、**實現

3.4 佇列的基本概念

3.5佇列的順序儲存結構

一.構造原理

二、**實現

三.迴圈佇列

3.5 佇列的鏈式儲存結構

一.構造原理

二、**實現

一、堆疊的定義

堆疊是一種只允許在的一端進行插入操作和刪除操作的線性表。允許操作的一端稱為棧頂,棧頂元素的位置由乙個稱為棧頂指標的變數給出。當表中沒有元素時,稱之為空棧

二、堆疊的基本操作

1. 插入

(進棧、入棧)

2. 刪除

(出棧、退棧)

3. 測試堆疊是否為空

4. 測試堆疊是否已滿   5. 檢索當前棧頂元素

描述堆疊的順序儲存結構最簡單的方法是利用一維陣列 stack[ 0..m–1 ] 來表示,同時定義乙個整型變數( 不妨取名為top) 給出棧頂元素的位置。

上溢——

當堆疊已滿時做插入操作。(top=m–1);

下溢——

當堆疊為空時做刪除操作。(top=–1)

#include #include #include #define maxsize 100

using namespace std;

//定義棧

typedef struct stack

*stack,snode;

//建立乙個空棧

stack creatstack()

//入棧

bool push(stack &s, int x)

//出棧

bool isempty(stack s)

int pop(stack &s)

int main()

while(!isempty(s))

operation;

typedef enum bool;

typedef int position;

struct snode ;

typedef struct snode *stack;

stack createstack( int maxsize )//要寫

bool push( stack s, elementtype x, int tag )//要寫

if(tag == 1)

else

return true;

}elementtype pop( stack s, int tag )//要寫

if(tag == 1)

else

}operation getop(); /* details omitted */

void printstack( stack s, int tag ); /* details omitted */

int main()

}return 0;

}

鏈結堆疊就是用乙個線性鍊錶來實現乙個堆疊結構, 同時設定乙個指標變數( 這裡不妨仍用

top表示)指出當前棧頂元素所在鏈結點的位置。棧為空時,有top=null。

#include#include#includeusing namespace std;

typedef struct snode

*stack,snode;

stack createstack()

//入棧

bool isempty(stack s)

void push(stack &s,int e)

//出棧

int pop(stack &s)

int main()

while(!isempty(s))

qs;void init_quence(qs *s, int ms) /*初始化佇列*/

void in_quence(qs *s, int val) /*入隊函式*/

s->rear = (s->rear+1)%s->maxsize;

s->quence[s->rear] = val;

}int out_quence(qs *s) /*出隊函式*/

}void print_quence(qs *s) /*列印佇列中元素*/

while(i != s->rear);

}void clear_quence(qs *s) /*清除佇列*/

int count_quence(qs *s) /*統計佇列個數*/

while(i != s->rear);

return count;

}int main()

; init_quence(&s, 7);

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

printf("out quence number is: %d.\n", out_quence(&s));

print_quence(&s);

clear_quence(&s);

return 0;

}

把佇列(陣列)設想成頭尾相連的迴圈表,使得陣列前部由於刪除操作而導致的無用空間盡可能得到重複利用,這樣的佇列稱為迴圈佇列

佇列的鏈式儲存結構是用乙個線性鍊錶表示乙個佇列,指標front與rear分別指向實際隊頭元素與實際隊尾元素所在的鏈結點。

#include #include typedef int lqeletype;

typedef struct queuenodequeuenode;

typedef queuenode *queuep;//定義指向佇列節點的指標(相當於頭指標)

typedef struct linkqueuelinkqueue;

void init(linkqueue *q)

void insertele(linkqueue *q,lqeletype e)

void deleteele(linkqueue *q,lqeletype *e)else

free(p);

}}void getele(linkqueue q,lqeletype *e)else

}int main()

資料結構第三章棧和佇列

第四章 棧和佇列 1.棧 限定僅在表尾進行插入或刪除操作的線性表,表尾端稱為棧頂,表頭端稱為棧底。棧頂移動,棧底固定。特點 先進後出 後進先出 typedef struct sqstack status push sqstack s,selemtype e status pop sqstack s,...

資料結構 第三章 棧和佇列

3.1特殊的線性表 棧 3.2特殊的線性表 佇列 3.1特殊的線性表 棧 3.1.1棧的邏輯結構 棧 限定僅在表尾進行插入和刪除操作的線性表。空棧 不含任何資料元素的棧。允許插入和刪除的一端稱為棧頂,另一端稱為棧底。棧的操作特性 後進先出。3.1.2棧的順序儲存結構及實現 順序棧類 順序棧類的宣告 ...

資料結構 第三章棧和佇列

棧中允許插入和刪除的一端為棧頂 top 另一段為棧底botton 遵循後進先出的原則 棧的抽象資料型別描述 clear置空 isempty判棧空 peek取棧 push入棧 pop出棧 順序棧及其基本操作的實現 top為0時為空 top stackelem.length 棧的長度top 鏈棧中插入乙...