鍊錶:儲存結構的一種,包含兩個部分,資料域和指標域,相對於順序儲存結構來說,插入和刪除的演算法時間複雜度只為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...
資料結構之單鏈表
由於順序表再插入或者刪除時需要移動大量資料,並且如果表比較大,會比較難分配連續的儲存空間導致儲存資料失敗。因此可以採用鍊錶結構,鍊錶結構是一種動態儲存分配的結構形式,可以根據需要動態的申請所需的儲存單元。鍊錶又分為單鏈表,雙向鍊錶,以及單迴圈鍊錶,多重鏈的迴圈鍊錶。本文先介紹單鏈表。典型的單鏈表結構...