資料結構之單鏈表

2021-12-30 01:14:21 字數 3038 閱讀 8373

鍊錶:儲存結構的一種,包含兩個部分,資料域和指標域,相對於順序儲存結構來說,插入和刪除的演算法時間複雜度只為o(1).

定義://定義

typedef struct node *linklist; //linklist,指標指向每乙個元素

typedef struct nodenode;

注意:假設結點p表示乙個結點a,那麼p->next表示的下乙個結點b,p->next也表示結點a的指標域,故,指標域存放的是指向下乙個結點的指標。

以下為簡單的c語言實現:

#include "stdio.h"

#include "string.h"

#include "ctype.h"

#include "stdlib.h"

#include "io.h"

#include "math.h"

#include "time.h"

#define ok 1

#define error 0

#define true 1

#define false 0

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

typedef int status;

typedef int elemtype;

//定義

typedef struct node *linklist; //linklist,指標指向每乙個元素

typedef struct nodenode;

//初始化

status initlist(linklist *l)

(*l)->next = null;//指標域為空

return ok;

} //獲取第幾個元素

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

if ( !p || j>i )

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

*e = p->data; /* 取第i個元素的資料 */

printf("第%d元素為%d\n",i,*e);

return ok;

}//判斷是否為空

status isemptylist(linklist l)else

} //獲取鍊錶的長度

int listlength(linklist l)

return i;

} //遍歷鍊錶

status listvisit(linklist l)

printf("\n");

return ok;

}//建立表,兩種方法,頭插法和尾插法

//頭插法,在每乙個頭的開始不段插入,例如我們插入0-9,那麼輸出的結果就是9-0

void createlisthead(linklist *l,int n)

}//尾插法 ,最末尾元素後面插入,插入0-9 輸出0-9

void createlisttail(linklist *l,int n)

r->next = null; //表示當前鍊錶結束

} //重置表,也就是乙個個結點的釋放

status listclear(linklist *l)

(*l)->next = null; //頭結點指標域賦值為空

printf("清空完成\n");

return ok;

}//查詢表中元素

int locateele(linklist l,elemtype e)

p = p->next;

} return 0;

}//插入元素到表

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的後繼賦給乙個我們設定為q的結點,這個結點就是我們要刪除的

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

*e = q->data; //將要刪除的元素的值賦給*e

printf("刪除的元素為%d:\n",*e);

free(q); //記得free

return ok;

}int main()

listvisit(l);

//插入單個元素

listinsert(&l,2,100);

e = 100;

locateele(l,e);

listvisit(l);

//刪除元素

listdelete(&l,2,&e);

listvisit(l);

//獲取第幾個元素

getelem(l,5,&e);

//清空重置

listclear(&l);

listvisit(l);

//頭插法

createlisthead(&l,10);

listvisit(l);

//尾插法

資料結構之單鏈表

date 08 07 06 descript 單鏈表的實現與應用 public class linlist public node gethead 定位函式 public void index int i throws exception if i 1 current head.next int j...

資料結構之單鏈表

鍊錶 儲存結構的一種,包含兩個部分,資料域和指標域,相對於順序儲存結構來說,插入和刪除的演算法時間複雜度只為o 1 定義 定義 typedef struct node linklist linklist,指標指向每乙個元素 typedef struct nodenode 以下為簡單的c語言實現 in...

資料結構之單鏈表

由於順序表再插入或者刪除時需要移動大量資料,並且如果表比較大,會比較難分配連續的儲存空間導致儲存資料失敗。因此可以採用鍊錶結構,鍊錶結構是一種動態儲存分配的結構形式,可以根據需要動態的申請所需的儲存單元。鍊錶又分為單鏈表,雙向鍊錶,以及單迴圈鍊錶,多重鏈的迴圈鍊錶。本文先介紹單鏈表。典型的單鏈表結構...