資料結構整理 第三章 棧和佇列

2021-09-11 19:44:01 字數 2573 閱讀 6119

上一章——線性表:

下一章——樹:

初始化s.top=-1,棧頂元素s.data[s.top]

注 如果棧頂指標為s.top=0,則進棧s.data[s.top++]=x,出棧x=s.data[–s.top],相應棧空棧滿條件也會變化

共享棧 topl(左邊)=-1,topr(右邊)=maxsize為空;當topr-topl=1為滿

鏈式棧lhead指向棧頂元素

鏈式入隊,相當於頭插法,p->next=lhead->next;lhead->next=p;

n個不同元素進棧,出棧序列為(卡特蘭數): (2n

)!(n

+1)!

n!

\dfrac

(n+1)!

n!(2

n)!​

**

順序棧

#define maxsize 50

typedef struct sqstack; //與順序表差不多

鏈式棧typedef struct linknode*listack;

int judge (char a)

}i++;

}if (j!=k) else

}

初始化:q.front=q.rear=0;

出隊:q.front=(q.front+1)%maxsize;

入隊:q.rear=(q.rear+1)%maxsize;

隊滿:(q.rear+1)%maxsize==q.front

隊空:q.front=q.rear(犧牲乙個單元來區分隊空) / 鍊錶則是q.front== null&&q.rear== null;隊長:(q.rear-q.front+maxsize)%maxsize

鍊錶刪除元素時,只有乙個結點時,刪除後隊列為空,要修改尾指標rear=front

**

#define maxsize 50

typedef structsqqueue;

if ((q.rear+1)%maxsize==q.front)

return false;

q.data[q.rear]=x;

q.rear=(q.rear+1)%maxsize;

if (q.rear==q.front)

return false;

x=q.data[q.front];

q.front=(q.front+1)%maxsize;

typedef structlinknode;

typedef structlinkqueue;

s=(linknode*)malloc(sizeof(linknode));

s->data=x;

s->next=null;

q.rear->next=s;

q.rear=s;

if(q.front==q.rear) return false;

p=q.front->next;

x=p->data;

q.front->next=p->next;

if(q.rear==p) //只有乙個結點

q.rear=q.front;

free(q);

棧的應用:括號匹配、迷宮求解、進製轉換; 隊的應用:緩衝區、廣度優先搜尋、樹的層次遍歷

int op(int a,char op,int b) else 

}}

陣列

一維:loc(ai)=loc(a0)+i*l

二維(以行優先,h為列下標):loc(ai,j)=loc(a0,0)+[i*(h+1)+j]*l

矩陣壓縮

對稱:n階壓縮後有(1+n)n/2個元素;

ai,j與陣列bk的關係為(k從零開始)

當i>=j時,下三角及對角線元素, k=i

(i−1

)2+j

−1

k=\dfrac+j-1

k=2i(i

−1)​

+j−1

當ik =j

(j−1

)2+i

−1

k=\dfrac+i-1

k=2j(j

−1)​

+i−1

下三角(上三角類似,具體看書):壓縮後有(1+n)n/2+1個元素;

當i>=j時,下三角及對角線元素, k=i

(i−1

)2+j

−1

k=\dfrac+j-1

k=2i(i

−1)​

+j−1

當ik =n

(n+1

)2

k=\dfrac

k=2n(n

+1)​

帶狀矩陣 下標k=行i×2+列j-3

稀疏矩陣 (行標、列標、值)

如果您看了這篇文章覺得有用的話,請隨意打賞,您的支援將鼓勵我繼續創作,謝謝!

資料結構第三章棧和佇列

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

資料結構 第三章 棧和佇列

目錄 3.1 堆疊的基本概念 3.2 堆疊的順序儲存結構 一 構造原理 二 實現 三.多棧共享連續空間問題 3.3 堆疊的鏈式儲存結構 一.構造原理 二 實現 3.4 佇列的基本概念 3.5佇列的順序儲存結構 一.構造原理 二 實現 三.迴圈佇列 3.5 佇列的鏈式儲存結構 一.構造原理 二 實現 ...

資料結構 第三章 棧和佇列

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