個人學習 資料結構 線性表,單鏈表C語言實現

2021-09-02 09:20:19 字數 2635 閱讀 2241

[color=blue]線性表插入演算法思路:

如果插入位置不合理,丟擲異常

如果線性表長度大於等於陣列長度,則丟擲異常貨動態增加容量

從最後乙個元素開始想前遍歷到第i個位置,分別將他們都向後移動乙個位置

將要插元素填入位置i處

表長加1[/color]

#define maxsize 20

#define ok 1

#define error 0

#define true 1

#define false 0

typedef int status;

typedef int elemtype;

typedef struct

sqllist;

//獲取線性表某個資料

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

//插入

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

}l->data[i-1] = e;

l->length++;

return ok;

}//線性單鏈表儲存結構

typedef struct node

node;

typedef struct node *linklist;//定義linklist

[color=blue]單鏈表的讀取演算法思路:

1.宣告乙個結點p指向鍊錶的第乙個結點,初始化j從1開始

2.當jnext;

j = 1;

while(p && jnext;

++j;

}if( !p && j<-=i)

return error:

*e = p->data;

return ok;

}[color=blue]單鏈表的插入演算法設計思路

1.宣告一節點p指向鍊錶第乙個結點,初始化j從1開始

2.當jdata;

6.單鏈表的標準插入語句 s->next = p->next; p->next = s;

7.返回成功[/color]

//單鏈表的插入

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

if(!p || j<=i)

return error; //第i個元素不存在

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

s->data = e;

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

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

return ok;

}[color=blue]單鏈表的刪除第i個結點的演算法思路

1.宣告一結點p指向鍊錶第乙個結點,初始化j從1開始;

2.當jnext賦值給q;

5.單鏈表的刪除標準語句p->next = q->next;

6.將q結點中的資料賦值給e

7.釋放q結點

8.返回成功[/color]

//單鏈表的刪除

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

if(!(p->next)|| j>=1)

return error;

q = p->next;

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

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

free(q)

return ok;

}[color=blue]單鏈表整表建立的演算法思路

1.宣告一結點p和計數器變數i;

2.初始化一空鍊錶l;

3.讓l的頭結點的指標指向null,即建立乙個帶頭結點的的單鏈表

4.迴圈:

生成一新節點賦值給p;

隨機生成一數字賦給p的資料域p->data

將p插入頭結點與新節點之間[/color]

//單鏈表的整表建立

void createlisthead(linklist *l,int n)

}[color=blue]單鏈表的整表刪除的演算法設計思路

1.宣告一結點p q;

2.將第乙個結點賦值給p;

3.迴圈:

將下一結點賦值給q;

釋放p;

將q賦值給p.[/color]

//單鏈表的整表刪除

status clearlist(linklist *l)

(*l)->next = null;

return ok;

}[color=blue]單鏈表結構與線性表儲存結構的優缺點

儲存分配方式

順序儲存結構用一段連續的儲存單元依次儲存線性表的資料元素

單鏈表採用鏈式儲存結構,用一組任意的儲存單元存放線性表的元素

時間效能

查詢順序儲存結構o(1)

單鏈表o(1)

插入和刪除

順序儲存結構需要平均移動表長的一半的元素,時間為o(n)

空間效能

順序儲存結構需要預先分配好儲存空間,分大了,浪費,分小了發生溢位

單鏈表不需要分配儲存空間,只要有就可以分配,元素給叔也不受限制[/color]

資料結構 線性表 單鏈表

本文只要實現單鏈表的初始化 插入 尾插 頭插 任意位置插入 刪除 尾刪 頭刪 刪除指定元素 查詢等。定義單鏈表 typedef int datatype typedef struct linknode linknode,plinknode,plist 實現單鏈表的所有介面 void initlink...

資料結構 線性表 單鏈表

資料結構 線性表的鏈式表示 單鏈表 線性表元素序號從1算起 date 2017 4 13 include include define initsize 100 define elemtype char typedef struct lnodelnode,linklist linklist crea...

資料結構 線性表 單鏈表

include include 結構體的定義和數序表的定義 typedef int elemtype typedef struct node node 函式的宣告 void initnode node h int addnode node h,elemtype e void deletenode n...