初始化執行期間通過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...