資料結構(棧和佇列)

2021-09-25 16:07:18 字數 2153 閱讀 4738

知識要點:

棧的定義、結構特點及其儲存方式(順序儲存與鏈結儲存)和基本操作的實現演算法;

佇列的結構、特點及其儲存方式(順序儲存與鏈結儲存)和基本操作的實現演算法。

遞迴的基本概念和實現原理以及用遞迴的思想描述問題和書寫演算法的方法;

用棧實現遞迴問題的非遞迴解法。

棧的定義:只允許一段進行插入或者刪除操作的線性表;該端稱為棧頂(top),相反另一端不允許被操作的稱為棧底(base)

棧內元素的個數稱為棧的大小,不含任何元素的棧稱為空棧;

棧的特性:先進後出型(last in first out)

棧的儲存結構(順序訪問)利用一組連續的記憶體空間訪問(預先開闢記憶體maxsize)

1、順序棧初始化:s.top=-1;s.base=0;

2、入棧操作:s.data[++s.top] (棧不滿棧頂指標加一,資料入棧);

3、出棧操作:s.data[s.top],s.top-- (棧非空,取棧頂元素,棧頂指標減一);

4、棧空條件:s.top=-1;棧滿條件:s.top-s.base=maxsize-1;(即s.top=maxsize-1)

5、對於棧的操作:初始化、棧判空、入棧、出棧、取棧頂元素時間複雜度都為o(1);

棧的儲存結構(鏈式訪問)利用指標標明資料元素之間的的邏輯關係(不用預先開闢記憶體)

1、鏈棧初始化:s=null;//預設為空棧

2、入棧操作:開闢乙個新結點p

p->next=s;s=p;//修改棧頂指標

3、出棧操作:取棧頂元素;儲存當前棧頂指標p=s;棧頂指標後移s=s->next;清除原棧頂指標free(p);

3、棧空條件:s=null;棧滿條件:一般不會出現棧滿情況;

4、對於棧的操作:初始化、棧判空、入棧、出棧、取棧頂元素時間複雜度都為o(1);

補充(共享棧):兩端都為棧底,兩端的棧底指標分別為s.top1和s.top2;

初始化s.top1=-1以及s.top2=maxsize+1

入棧操作:先++s.top1或--s.top2,之後進行入棧操作;

出棧操作:先取出資料,之後s.top1--或s.top2++;

棧滿操作:s.top2-s.top1=1;(此共享棧相當於乙個陣列兩個棧結構)

n個不同元素入棧得到的出棧序列的個數為:c(n ,2n)/(n+1);前者為組合數

棧的應用:遞迴呼叫、括號匹配、表示式求值(字首表示式、中綴表示式、字尾表示式)

佇列的定義:允許在表的兩端進行操作的線性表,一端進行入隊(插入),另一端進行出隊(刪除);允許插入的一端稱為隊尾

允許刪除的一端稱為隊頭;

佇列內元素個數的數量稱為佇列長度,不含任何元素的佇列稱之為空佇列;

佇列的特性:先進先出型(first in first out)

佇列的儲存結構(順序訪問)迴圈佇列防止出現假溢位現象;預先開闢記憶體maxsize

1、迴圈佇列的初始化:q.front=q.rear=0;

2、入隊操作:q.rear=(q.rear+1)%maxsize;

3、出隊操作:q.front=(q.front+1)%maxsize;

4、隊空條件:q.front=q.rear;隊滿條件:(q.rear+1)%maxsize=q.front;

5、佇列的初始化、隊判空、入隊、出隊、求隊長(q.rear-q.front+maxsize)%maxsize時間複雜度都為o(1);

佇列的存處結構(鏈式訪問)

1、鏈式佇列的初始化:q.front=q.rear=new qnode;

q.front->next=null;//預設隊列為空

2、入隊操作:新建一結點p(隊首指標通常放在鏈隊的頭部)

p->next=null,q.rear->next=p;  //入隊    q.rear=p;//修改隊尾指標

3、出隊操作:取出隊頭元素p=q.front->next,e=p->data;隊頭指標後移q.front=p->next;清除隊頭元素free(p)

如果被刪除的是最後乙個元素(即刪除此元素隊列為空)則:q.rear=q.front;//修改隊尾指標

4、隊空條件:q.front=q.rear;

5、佇列的初始化、隊判空、入隊、出隊、求隊長時間複雜度都為o(1);

補充(雙端佇列):兩端均可以進行插入或者刪除操作的佇列;

佇列的應用:樹的層次遍歷以及圖的廣度遍歷、計算機內緩衝區的設定;

資料結構 棧和佇列

棧 基礎 知識棧 練習題 佇列 基礎知識 棧示意圖 後進先出 順序棧結構定義 define maxsize 1024 struct stack 操作函式 push 入棧 pop 出棧 struct lstack 鏈棧示意圖 操作函式 push 入棧 pop 出棧 注意 也可以直接呼叫系統已經寫好的庫...

資料結構 棧和佇列

本章的基本內容是 兩種特殊的線性表 棧和佇列 從資料結構角度看,棧和佇列是操作受限的線性表,他們的邏輯結構相同。從抽象資料型別角度看,棧和佇列是兩種重要的抽象資料型別。p棧 限定僅在表的一端進行插入和刪除操作的線性表。p允許插入和刪除的一端稱為棧頂,另一端稱為棧底。p空棧 不含任何資料元素的棧。a ...

資料結構 棧和佇列

用兩個棧來實現乙個佇列,完成佇列的push和pop操作。佇列中的元素為int型別。class solution int pop node stack2.top stack2.pop return node private stack stack1 stack stack2 大家都知道斐波那契數列,現...