陳姥姥資料結構筆記(堆疊,線性表)

2021-10-06 19:00:58 字數 3233 閱讀 9011

一.線性表(陣列實現)

#include

#define maxsize n

//此時的n為具體的乙個數,由於時多形資料型別,所以在此寫成了n。

typedef

struct lnode*list;

//注意此時typedef之後的 list 再次定義時為乙個指標。

struct lnode

;struct lnode l;

//定義乙個結構體

list ptrl;

//因為定義的為乙個指標所以在這裡用了指標的縮寫來標誌定義的是乙個指標 ptr為pointer的縮寫。

int main (

)//建立空的線性表

list makeempty()

//查詢(按數值查詢)

int find (list *ptrl,elementtype x)

if(i<=ptr->last)

else

return-1

;}//插入(第i(1<=i<=n+1)個位置上插入乙個值為x的新元素)

void

insert

(list *ptrl, elementtype x,

int i)

if(i>ptrl->last+

2||i<1)

int j,temp;

for(j=ptrl->last ; j>=i-

1; j--

) ptrl->data[i-1]

=x; ptrl->last++

;//注意last時刻指向最後乙個元素下標;

return0;

}//刪除(刪除表的第i(1<=i<=n)個位置上的元素)

void

delete

(list *ptrl,

int i)

int j;

for(j=i-

1;jlast; j++

)return0;

}

二. 線性表(鍊錶)

#include

typedef

struct lnode *list;

struct lnode

;struct lnode l;

list ptrl;

int main (

)//求表長

int length (list ptrl)

return i;

}//查詢

//按序號查詢

list findkth

(list ptrl,

int k)

if(p->next!=

null

)return p;

else

return

null

;//注意此時只能return null因為返回型別為list。

}//按值查詢

list findvalue

( list ptrl, elementtype x)

return p;

}//插入(在第i-1(1<=i<=n+1)個結點後插入乙個值為x的新結點)插入第i個位置。

list insert

(list ptrl,

int i,elementtype x)

p =findkth

( ptrl,i-1)

;if(p)else

}//刪除鍊錶的第i(1<=i<=n)個位置上的結點

list delete (

int i, list ptrl)

else

return

null;}

p=findkth (ptrl,i-1)

;if(p==

null

)else

if(p->next=

null

) s=p->next;

p->next=s->next;

free

(s);

return ptrl;

}

三. 廣義表

廣義表時線性表的推廣

對於線性表而言,n個元素都是基本的單元素

廣義表中,這些元素不僅可以是單元素也可以是另乙個廣義表

會遇到如下問題:對於乙個域來講他是乙個單元素還是廣義表?

就要用到union,同時設乙個標記來表示它到底是data還是sublist。

四. 多重鍊錶

概念:多重鍊錶中結點的指標域有多個。表中的結點可能同時隸屬於多個鏈。

五. 字尾表示式求值:從左向右掃瞄,逐個處理運算數和運算子。實際上遵循的是堆疊原理。

六.堆疊

#include

#define maxsize n

//寫上具體數值

typedef

struct snode *stack;

//同樣定義的是指標,s代表stack

struct snode

;//入棧

void

push

(stack ptrs, elementtype item)

else

return0;

}//出棧

elementtype pop

(stack ptrs )

else

return

(ptrs->data[

(ptrs->top)--]

);//注意自減的位置

}// 堆疊的鏈式儲存

//需要注意的是如果用鍊錶實現他的top在鍊錶的頭上

typedef

struct snode *stack;

struct snode

;//建立乙個空的堆疊

//需要注意的是堆疊的建立保留了頭結點

stack createstack()

//檢查堆疊是否為空

//若為空返回整數1,否則返回整數0;此時就可以考慮到條件表示式

int isempty (stack s)

//插入結點

void push (elementtype item ,stack s)

//pop操作

elementtype pop

(stack s)

else

}

資料結構之線性結構 線性表,堆疊,佇列

對於線性表的操作 1 建立線性表 2 確定線性表的長度 3 確定線性表是否為空 4 訪問表中指定位置的節點的值 5 查詢指定值在表中的位置 6 在表中指定位置插入乙個新節點 7 刪除表中指定位置的節點 2.線性表的鏈結儲存結構 用鏈結方式儲存的線性表稱為鍊錶。優點 不必調整節點的位址,儲存單元對儲存...

資料結構筆記 線性表

思考 怎麼程式設計解決多項式相加問題?1.線性表概念 由同型別資料元素構成的有序序列的線性結構 1.表中元素個數稱為線性表的長度 2.線性表中沒有元素時稱為空表 3.表的起始位置稱為表頭,結束位置稱為表尾。2.線性表的adt描述 3.線性表的順序儲存實現 未測試 include using name...

資料結構筆記 線性表

資料元素的資料型別。struct seqlist seqlist sl create int maxlen void sl free seqlist slist 釋放 刪除 順序表。與sqlst create 配對。void sl makeempty seqlist slist 置為空表。intsl...