上一章——線性表:
下一章——樹:
初始化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棧的順序儲存結構及實現 順序棧類 順序棧類的宣告 ...