資料結構嚴蔚敏 順序表增,刪,改,合併順序表

2021-09-29 18:03:07 字數 3433 閱讀 4303

時隔一年,再一次開啟了嚴奶奶的這本資料結構,事實證明這一年裡還是有進步的,原因在於,我盡然能看懂這本書了,雖然與c語言交情不深,但是資料結構畢竟是凌駕於語言之上。

今兒個開始第乙個---->順序表的編輯

嚴奶奶的書上原始碼都有,因為是類c原始碼,所以有的寫地方需要進行小小的改動,也給一年沒有碰過指標的我上了一課o(╥﹏╥)o。如果有哪個大佬有一天能看見我發的這篇文章,有什麼錯誤,還請批評指出。

標頭檔案:

#include

#include

函式結果狀態碼:

狀態碼在課本p10有提到

其中的elemtype和status相當於給整型int起了個別名,和int的作用一模一樣

#define list_init_size 100 

//初始分配量

#define listincrement 10

//分配增量

#define overflow -1

//狀態碼

#define ok 1;

#define error -1;

typedef

int elemtype;

typedef

int status;

由於線性表的長度可變,且所需的最大儲存空間隨問題的不同而不同,可以為其動態分配一維陣列,**如下有兩種定義方法:

1,結構體標籤命名,

此時的sqlist可以去宣告新的結構體變數,如之後原始碼中的sqlist la

struct sqlist

;

2,也可以用typedef建立新型別,

此時的sqlist可以去宣告新的結構體變數,如之後原始碼中的sqlist la

typedef

struct

sqlist;

status initlist

(sqlist &l)

l.length =0;

l.listsize = list_init_size;

return ok;

}

到這裡前戲完成

演算法不管是插入還是刪除,還是線性表的合併,書上講的都特別清楚,除了把原始碼拷過來之外,還想補充一點自己的小理解嘻嘻o(∩_∩)o。

下面的演算法中有形參變數前新增了&,書本p10,這是借用了c++老大哥的引用呼叫的引數傳遞,會直接對實參進行處理,換句話說,傳值引用一般就是生成乙個臨時物件,而引用呼叫是呼叫引數本身。但是區別於指標形參,值不能為null且不能更改指向的記憶體。

status listinsert

(sqlist &l,

int i, elemtype e)

if(l.length >= l.listsize)

l.elem = newbase;

l.listsize +

= listincrement;

}int

*q =

&(l.elem[i-1]

);//插入位置及之後的元素後移

for(

int*p =

&(l.elem[l.length-1]

);p>=q;p--

)*q = e;

l.length++

;return ok;

}

realloc函式,為線性表擴容。判斷i的數值是否合法,以及插入位置及之後的元素後移書上都有詳細解釋。

這裡乙個地方耗了我好長時間 int *q = &(l.elem[i-1]); 還是不熟悉指標的原因吧,後來查了 菜鳥教程,才了解了大概,elem是int型指標, elem[數值-1] 就相當於 陣列名[數值-1] 也相當與於 *(elem+數值) 遍歷當前陣列的第(數值)個元素,感覺以後還會範糊塗,先把此時的理解留在這裡吧。

後面的沒怎麼鑽牛角尖,理解起來相對順暢一點,也相應的做了注釋,不做過多的闡述了(其實就是懶)

/*

刪除第i個元素

*/status listdelete

(sqlist &l,

int i, elemtype &e)

//被刪除元素位置

int*p =

&(l.elem[i-1]

);e =

*p;//此時的表長度 elem基址後移length-1位,指向表元素的最後一項

int*q = l.elem+l.length-1;

//刪除位置之後的元素前移,覆蓋前一項

for(

*p;p)//表長度減一

l.length--

;return ok;

}

void

listupdate

(sqlist &l,

int i)

status listselect

(sqlist &l,

int num,

int&index)

}return-1

;}

void

mergelist

(sqlist &la, sqlist &lb, sqlist &lc)

while

(pb <= p)

*pc++

=*pa++

;while

(pb <= q)

*pc++

=*pb++

;}

張某人借鑑了大佬的輸入(這裡是真的不會了o(╥﹏╥)o),so spisy,end。

main()

scanf

("%d"

,&lb.length)

;for

(int i=

0;i)mergelist

(la, lb, lc)

;//向la表的第三項插入數字100

// listinsert(la, 3, 100);

//刪除la表的第三項

// elemtype e;

// listdelete(la, 3 , e);

// printf("被刪除的元素-->%d\n",e);

//查詢第i個元素,若存在則返回元素第一次出現所對應的下標,不存在返回-1

// elemtype index;

// listselect(la, 3, index);

// printf("查詢元素的下標為-->%d\n",index);

printf

("操作完成,此時的表內容為");

for(

int i=

0;i)}

資料結構(嚴蔚敏)陣列順序表

c1.h 程式名 include include include malloc 等 include int max等 include eof z或f6 null include atoi include eof include floor ceil abs include exit 函式結果狀態 d...

資料結構(嚴蔚敏)串順序結構

c1.h 程式名 include include include malloc 等 include int max等 include eof z或f6 null include atoi include eof include floor ceil abs include exit 函式結果狀態 d...

資料結構 嚴蔚敏

最近一直想找一本純資料結構的書來學習,找來找去都沒有找到一本合適的書籍,相比之下國內的書籍之中,嚴蔚敏和吳偉民的還算是經典版了,很多國內其他資料結構教材都參考這本書的。但缺點是很多都是偽 對程式設計初學者來說有一些難度,甚至有些考研的同學來看這本書有很多還看不懂,並且裡面也有些容易迷惑人的地方。出於...