資料結構 線性表

2021-07-23 04:10:26 字數 1918 閱讀 5386

線性表(list):零個或多個資料元素的有限序列

1.線性表的順序儲存結構——用一段位址連續的儲存單元依次儲存線性表的資料元素。

/*線性表順序儲存*/

#define maxsize 20; /*儲存空間初始分配量*/

typedef int elemtype; /*elemtype 型別根據實際情況而定,這裡假設為 int*/

typedef struct sqlist;

/*插入*/

status listinsert(sqlist *l, int i, elemtype e)

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

if(i <= l->length)

} l->data[i - 1] = e; /*插入新元素*/

l->length++; /*表長增加一*/

return ok;

}

/*刪除*/

status listdelete(sqlist *l, int i, elemtype *e)

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

*e = l->data[i - 1]; /*將最後乙個元素賦給e*/

if(i < l->length)

} l->length--; /*表長減一*/

return ok;

}

2.線性表的鏈式儲存結構

/*單鏈表*/

typedef struct node node;

typedef struct node *linklist;

/*單鏈表插入*/

status listinsert(linklist *l, int i, elemtype e)

if(!p && j > i)

s = (linklist)malloc(sizeof(node)); /*生成新的節點*/

s->data = e;

s->next = p->next; /*將 p 的後繼節點賦值給 s 的後繼*/

p->next = s; /*將 s 賦值給 p 的後繼*/

return ok;

}

/*單鏈表刪除*/

status listdelete(linklist *l, int i, elemtype *e)

if(!(p->next) || j > i)

q = p->next;

p->next = q->next; /*將 q 的後繼賦值給 p 的後繼*/

*e = q->data; /*將 q 節點中的資料賦值給 e*/

free(q); /***此節點,釋放記憶體*/

return ok;

}

3.迴圈鍊錶

單鏈表的尾指標為空;迴圈鍊錶只需將 尾指標指向 頭指標 即可。

判斷 迴圈鍊錶 是否為空,讓 p->next 不等於頭結點即可。

4.雙向鍊錶——在單鏈表的每個節點中,再設定乙個指向其前驅節點的指標域。

/*雙向鍊錶*/

typedef struct dulnode dulnode, *dulinklist;

/*雙向鍊錶插入關鍵步驟*/

s->prior = p;

s->next = p->next;

p->next->prior = s;

p->next = s;

/*雙向鍊錶插入關鍵步驟*/

p->prior->next = p->next;

p->next->prior = p->prior;

資料結構(線性表)

1.試寫一演算法,在無頭結點的動態單鏈表上實現線性表操作insert l,i,b 並和在帶頭結點的動態單鏈表上實現相同操作的演算法進行比較。status insert linklist l,int i,int b 在無頭結點鍊錶l的第 i個元素之前插入元素 belse insert 2.已知線性表中...

資料結構 線性表

參考 一 線性表 順序表 單鏈表 迴圈鍊錶 雙鏈表 順序表 1.表的初始化 void initlist seqlist l 2.求表長 int listlength seqlist l 3.取表中第i個結點 datatype getnode l,i 4.查詢值為x的結點 5.插入 具體演算法描述 v...

資料結構 線性表

線性表是最基礎的一種資料結構,這樣的資料物件包含的資料元素具有一對一的前驅後繼關係。按其邏輯儲存方式的不同可分為兩類線性表 順序表和鏈式表。其中鏈式表又可分為線性鍊錶 迴圈鍊錶和雙向鍊錶。下面分別介紹下這幾種線性表的資料結構 1.順序表 typedef struct sqlist 插入演算法 i到n...