目錄
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 鏈棧中插入乙...