線性表的順序儲存結構動態態分配C語言實現

2021-10-09 23:53:26 字數 3434 閱讀 1875

初始化執行期間通過malloc函式為陣列申請空間,程式執行期間若空間不夠可通過realloc函式在保留原儲存值的前提下為陣列申請更大的連續儲存的空間。

源**如下:

#include

#include

#define initsize 1000

#define incsize 500

//增大順序表儲存空間時每次的增長值

#define overflow 9999

#define error -1

#define empty -2

typedef

int eletype;

typedef

struct

dlist;

// 函式申明

void

initlist

(dlist *l)

;void

insertlist

(dlist *l,

int i,eletype e)

;int

listlength

(dlist l)

;int

getelem1

(dlist l,

int i)

;void

getelem2

(dlist l,

int i,eletype *e)

;int

locateelem

(dlist l,

int e)

;void

listdelete

(dlist *l,

int i,eletype *e)

;void

printlist

(dlist l)

;int

emptylist

(dlist l)

;void

destroylist

(dlist *l)

;int

main()

printlist

(l);

printf

("hello!\n");

int m =

listlength

(l);

printf

("順序表的長度:\t%d\n"

,m);

insertlist

(&l,2,

22);printlist

(l);

printf

("第二個元素:%d\t\n"

,getelem1

(l,1))

;getelem2

(l,2

,&e)

;printf

("第三個元素:%d\t\n"

,e);

printf

("元素4的index=%d\n"

,locateelem

(l,4))

;listdelete

(&l,3,

&o);

printf

("刪除的元素值:%d\n"

,o);

printlist

(l);

printf

("%d\n"

,emptylist

(l))

;destroylist

(&l)

;return0;

}// 初始化鍊錶

void

initlist

(dlist *l)

void

insertlist

(dlist *l,

int i,eletype e)

l->delem = p;

// l->delem 指向新申請的儲存空間

l->length +

= incsize;

//表長修改為新的儲存空間可存放資料元素個數

}// if(i<1 || i>l->length)

// exit(error);

int j;

for(j=l->length-

1;j>=i-

1;j--

) l->delem[j+1]

= l->delem[j]

;//從表尾開始插入位置,資料元素依次後移動乙個位置

l->delem[i-1]

= e;

l->length++

;return;}

// 求線性表的長度

intlistlength

(dlist l)

// 獲取線性表的第i個元素

intgetelem1

(dlist l,

int i)

// 獲取線性表的第i個元素

void

getelem2

(dlist l,

int i,eletype *e)

// 確定元素e是線性表中的第幾個元素

intlocateelem

(dlist l,

int e)

//刪除線性表中的第i個元素,將其放在變數e中

void

listdelete

(dlist *l,

int i,eletype *e)

if(i<

1|| i>l->length)

exit

(error)

;*e = l->delem[i-1]

;// 線性表中的第i個元素存放於變數e中

int j;

for(j=i-

1; jlength-

1; j++

) l->length--

;return;}

//遍歷線性表

void

printlist

(dlist l)

printf

("\n");

}//判斷線性表為空,前提條件是線性表存在

intemptylist

(dlist l)

//銷毀線性表

void

destroylist

(dlist *l)

按照我們期望的執行結果

值得思考的是在insertlist(dlist *l,int i,eletype e)函式中有個完備性檢查未能實現:

if

(i<

1|| i>l->length)

exit

(error)

;

通過靜態分配和動態分配對比可知,共同點都是使用陣列構造,邏輯基本相同,不同的就是,動態分配在原陣列滿了的情況下可以擴充,而靜態的是陣列存滿就不能擴充了。大家可以思考兩種分配方式中所用到的空間複雜度和時間複雜度。

線性表的順序儲存 線性表的順序儲存結構

1,本文實現乙個線性表 2,順序儲存定義 1,線性表的順序儲存結構,指的是用一段位址連續的儲存單元依次儲存線性表中的資料元素 2,在 c 中可以用乙個陣列作為介質來儲存資料元素 3,設計思路 1,可以用一維陣列實現順序儲存結構 1,儲存空間 t m array 2,當前長度 int m length...

線性表 線性表的順序儲存結構

線性表的順序儲存結構 線性結構是乙個資料元素的有序 次序 集。集合中必存在唯一的乙個 第一元素 集合中必存在唯一的乙個 最後元素 除最後元素外,均有唯一的後繼 除第一元素外,均有唯一的前驅。adt list 資料關係 r1 adt list 容易混的概念 引用符號 和引用型操作沒有關係 加工型操作 ...

線性表 線性表的順序儲存結構

include include using namespace std define ok 1 define error 0 define list init size 100 define listincrement 10 typedef int status typedef int elemty...