其實我也不太懂,直到後來自己實現了一下這個結構,這貌似就是個容器的作用?相當於c++的vetcor?
我個人理解是,相當於咱們的錢包
如果有大佬進來的,明白的就用乙個形象化的語言來描述一下作用…
他是個線性結構,其實也就是體現邏輯結構的動態陣列之類的吧
下面來實現一下吧:
首先是順序表的結構體封裝:
包括了乙個字串陣列,陣列大小,順序表大小:
struct linerlist
;
建立並初始化順序表:
struct linerlist*
createlist
(int capacity)
//安全性考慮
struct linerlist* list =
(struct linerlist*
)malloc
(sizeof
(struct linerlist));
list->arrlen = capacity;
list->element =
(char*)
malloc
(sizeof
(sizeof
(list->arrlen)))
; list->size =0;
return list;
}
接下來就是實現插入,但是你想哈,插入元素多了,我們陣列是不是就不夠用了,我們是不是就得擴容,所以我們要實現的第乙個函式是陣列擴大,我們很輕鬆的想到乙個函式realloc重設陣列大小:
void
changearray1d
(char
** array,
int oldlen,
int newlen)
//安全性考慮
int lenth = oldlen > newlen ? oldlen:newlen;
*array =
realloc
(*array, lenth *
sizeof
(char))
;return
;}
那麼我來畫個圖來看一下這個插入:
它是得把索引位置要往後移動的,所以我們用乙個函式來實現一下這個移動方便呼叫:
void
copyarrtail
(char
* array,
int arrsize,
int index)
}
接下來是插入的函式:
void
insertelement
(struct linerlist* list,
int theindex,
char element)
if(list->size == list->arrlen)
//儲存,把當前索引下的元素移到後面去
copyarrtail
(list->element, list->size, theindex)
; list->element[theindex]
=element;
list->size++
;}
接下來是刪除元素的函式:畫個圖:
嘛,畫的難看了,將就看吧,也就是在index後面的元素覆蓋前面的乙個元素,然後縮小size,實現偽刪除就可以了
函式體:
void
copyfrontnum
(char
* array,
int arraynum,
int index)
}//跟上面的是一樣的,寫個覆蓋的函式實現一下
void
deleeteelement
(struct linerlist* list,
int index)
//安全性考慮
copyfrontnum
(list->element, list->size, index)
; list->size--
;}
下面是主函式來檢驗一下我們寫的是否成功
void
print
(struct linerlist* list)
printf
("\n");
}int
main()
輸出結果:
好了,順序表就到這裡了,我就暫且理解為乙個容器就可以了。。。
我真菜啊…
資料結構之順序表
首先是標頭檔案seqlist.h ifndef seqlist h define seqlist h include includeusing namespace std define elemtype int define seqlist default size 10 typedef struc...
資料結構之順序表
順序表的思想容易了解,但是 不容易掌握,我這裡根據老師所提供的 進行一下簡單的總結 這個 包含順序表的查詢,插入,刪除,建表,輸出資料 includeusing namespace std define ok 1 define error 0 define overflow 2 typedef in...
資料結構之順序表
順序表就是按照順序儲存方式儲存的線性表,該線性表的結點按照邏輯次序一次存放在計算機的一組連續的儲存單元中如下圖 由於順序表是一次存放的,只要知道了該順序表的首位址以及每個資料元素所占用的儲存長度,那麼我們就很容易計算出任何乙個資料元素 也就是資料繫結點 的位置。1 結點資料型別 public cla...