線性表(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...