棧和佇列 一站式入門,資料結構其實很簡單

2021-10-08 16:37:27 字數 2672 閱讀 8585

棧的抽象資料型別的型別定義:

adt stack

資料關係:

r1=約定an端為棧頂,a1端為棧底。

基本操作:初始化、進棧、出棧、取棧頂元素等

}adt stack

initstack(&s)初始化操作

操作結果:構造乙個空棧s。

destroystack(&s)銷毀棧操作

初始條件:棧s已存在。

操作結果:棧s被銷毀。

stackempty(s)判定s是否為空棧

初始條件:棧s已存在。

操作結果:若棧s為空棧,則返回true,

否則false。

stacklength()求棧的長度

初始條件:棧s已存在。

操作結果:返回s的元素個數,即棧的長度。

gettop(s,&e) 取棧頂元素

初始條件:棧s已存在且非空。

操作結果:用e返回s的棧頂元素。

clearstack(&s) 棧置空操作

初始條件:棧s已存在。

操作結果:將s清為空棧。

push(&s, e) 入棧操作

初始條件:棧s已存在。

操作結果:插入元素e為新的棧頂元素。

pop(&s,&e) 出棧操作

初始條件:棧s已存在且非空。

操作結果:刪除s的棧頂元素an,並用e返回

其值。使用陣列作為順序棧儲存方式的特點:簡單方便容易溢位(上溢下溢)

儲存方式:同一般線性表的順序儲存結構完全相同,

利用—組位址連續的儲存單元依次存放自棧底

到棧頁的資料元素。棧底一般在低位址端。

·附設top指標,指示棧頂元素在順序棧中的位置。

·另設base指標,指示棧底元素在順序棧中的位置。

base==top棧空

top-bace==stzcksie棧滿

stacksize表示棧可用的最大容量

順序棧的表示

#define maxsize 100

typedef structsqstack;

status initstack(sqstack  &s)

判斷順序棧是否為空

status stackempty(sqstacks)

//若棧為空,返回true;否則返回false

if (s.top == s.base)

return true;

else

return false;

}求順序棧長度

int stacklengh(sqstack s)

清空順序棧:

status clearstack( sqstack &s)

銷毀順序棧:

status destroystack( sqstack &s )

return ok;

}順序棧的入棧:

出棧

鏈棧鏈棧是運算受限的單鏈表,;只能從鍊錶一端進行操作

鏈棧初始化:

void initstack(linkstack &s)

判斷鏈棧是否為空

status stackempty(linkstack s)

鏈棧壓棧(入棧)

status push(linkstack &s,selemtype e)

a[rear%max]=data;

rear++;

return rear;

}int  dequeue(int *a,int front,int rear)

printf("%d ",a[front]);

//front不再直接 +1,而是+1後同max進行比較,如果=max,則直接跳轉到 a[0]

front=(front+1)%max;

return front;

}int main()

使用此方法需要注意的是,順序佇列在判斷陣列是否已滿時,出現下面情況:

當隊列為空時,佇列的頭指標等於佇列的尾指標;

當陣列滿員時,佇列的頭指標等於佇列的尾指標;

順序佇列的儲存狀態不同,但是判斷條件相同。為了對其進行區分,最簡單的解決辦法是:犧牲掉陣列中的乙個儲存空間,判斷陣列滿員的條件是:尾指標的下乙個位置和頭指標相遇,就說明陣列滿了,

佇列的初始化:

佇列的長度:

int queuelength (sqqueue q)

出隊:status dequeue (sqqueue &qqelemtype &e)

取隊頭元素

selemtype gethead(sqquere q)

return ok;

將元素e入隊

status enqueue(linkqueue &q,qelemtype e)

鏈佇列出隊

status dequeue (linkqueue &qqelemtype &e)

棧與佇列 Linux C程式設計一站式學習

資料結構的概念 資料結構是資料的組織方式。程式中用到的資料都不是孤立的,而是有相互聯絡的,根據訪問資料的需求不同,同樣的資料可以有多種不同的組織方式。資料的組織方式包含了儲存方式和訪問方式這兩層意思,二者是緊密聯絡的。比如說陣列元素的儲存空間是連續的。堆疊堆疊也是一組資料的集合,它的訪問規則限制為p...

一站式資料智慧型平台概念及能力

一站式資料智慧型平台依靠一體化管理,融合數智化工具,向不同行業使用者提供專業的 覆蓋資料全生命週期的產品及服務,幫助企業更好地利用資料價值,在數位化轉型過程中實現資料驅動業務。一站式資料智慧型平台概念界定 覆蓋各類資料全生命週期,融合數智化能力的專業資料服務 一站式資料智慧型平台依靠一體化管理,融合...

國內首個Hadoop一站式產品 直面大資料

本文講的是國內首個hadoop一站式產品 直面大資料,精誠集團是台灣的一家資訊服務企業,是亞洲資訊服務產業的領導廠商。精誠集團此次推出的一站式大資料解決方案etu,從軟體 硬體,到整合後的資料處理 分析 與未來擴充時的各個場景提供整體解決方案。etu的中文名字是 知意圖 由 意圖 發展而來,代表發現...