資料結構之單鏈表

2021-07-22 08:52:51 字數 3119 閱讀 1008

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

定義:

//定義

typedef

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

typedef

struct nodenode;

以下為簡單的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;

} return0;}

//插入元素到表

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...

資料結構之單鏈表

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

資料結構之單鏈表

眾所周知,線性表是資料結構中的一種基本的資料結構。線性表的實現基本的有兩種 一種是順序儲存方式,另一種是鏈式儲存方式。順序儲存的線性表又叫順序表,實現時一般利用陣列等在記憶體中連續儲存的這個資料型別,所以順序表是一種隨機訪問的資料結構。順序表的優點是 可以快速訪問任一 位置的元素 並且無需為表示元素...