資料結構之線性表(2)

2021-09-12 01:40:21 字數 2829 閱讀 1100

線性表的鏈式儲存特點使用一組任意的儲存單元儲存線性表的資料元素,這組儲存單元可以是連續的,也可以是不連續的。

鍊錶中第乙個節點儲存的位置叫頭指標。

單鏈表的第乙個節點前附設乙個節點叫頭結點。

頭指標:

頭指標是指鍊錶指向第乙個節點的指標,若煉表有頭結點,則是指向頭指標的結點。

頭指標具有標識作用,所以常用頭指標冠以鍊錶的名字。

無論鍊錶是否為空,頭指標都不為空,頭指標是鍊錶的必要元素。

頭結點:

頭結點是為了操作的統一和方便而設立的,放在第乙個元素的結點前面,其資料域一般無意義(也可存放鍊錶長度)。

有了頭結點,對第乙個元素結點前插入和刪除結點,其操作與其他結點的操作就統一了。

頭結點不一定是鍊錶必須要素。

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

typedef struct nodenode;

typedef struct node *linklist; //定義linklist

//初始條件:順序線性表l已存在

//操作結果:用e返回l中第i個資料元素的值

//最壞時間複雜度為o(n)

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

if(!p || j > i)

return error;

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

return ok;

}//在l中第i個位置之前插入新的資料元素e,l的長度加1

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->next = s;

return ok;

}//刪除l的第i個資料元素,並用e返回其值,l的長度減1

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

if(!(p->next) || j > i)

return error;

q = p->next;

p->next = q->next;

*e = q->data;

free(q);

return ok;

}//隨機產生n個元素的值,建立帶表頭結點的單鏈線性表l

void createlisthead(linklist *l,int n)

}//隨機產生n個元素的值,建立帶表頭結點的單鏈線性表l(尾插法)

void createlisttail(linklist *l,int n)

r->next = null;

}//清空鍊錶

status clearlist(linklist *l)

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

return ok;

}

單鏈表結構與順序儲存結構對比:

儲存分配方式:

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

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

時間效能:

查詢:插入和刪除:

空間效能:

順序儲存結構需要預事先分配儲存空間,分大了,浪費,分小了,容易上線溢位

單鏈表不需要分配儲存空間,只要有就可以分配,元素個數也不受限制。

用陣列表示的鍊錶成為靜態鍊錶。

//線性表的靜態鍊錶儲存結構

#define max_size 1000

typedef struct component,staticlinklist[maxsize];

//將一維陣列space中各分量鏈成一備用鍊錶。

//space[0].cur為頭指標,"0"表示空指標

status initlist(staticlinklist space)

space[maxsize-1].cur = 0; //目前靜態鍊錶為空,最後乙個元素為cur為0

return ok;

}//若備用空間鍊錶為非空,則返回分配的結點下標,否則返回0

int malloc_sll(staticlinklist space)

//在l中第i個元素之前插入新的資料元素e

status listinsert(staticlinklist l,int i,elemtype e)

l[j].cur = l[k].cur; //把第i個元素之前的cur賦值給新元素的cur

l[k].cur = j; //把新元素的下標賦值給第i個元素之前元素的cur

return ok;

}return error;

}//將下標為k的空閒結點**到備用鍊錶

void free_ssl(staticlinklist space, int k)

//刪除在l中第i個資料元素e

status listdelete(stacklinklist l,int i)

//表長

int listlength(staticlinklist l)

return j;

}

靜態鍊錶的優缺點:

優點:缺點:

將單鏈表中終端結點的指標端由空指標改為指向頭結點,就使整個鍊錶形成乙個環,這種頭尾相接的單鏈表成為單迴圈鍊錶。簡稱迴圈鍊錶。

雙向鍊錶是在單鏈表的每個結點中,再設定乙個其前驅結點的指標域。

資料結構之線性表 2

線性表一般分為順序表和煉表,本篇是對鍊錶的回顧,以c 建立簡單 帶頭結點 遞增單鏈表,實現插入和逆置功能為例。鍊錶的形式有很多種,其中最簡單 最基礎的是單鏈表。其他諸如迴圈鍊錶 雙向鍊錶 雙向迴圈鍊錶等,應該算是基於單鏈表的變形,個人認為其本質也還是單鏈表。單鏈表用來表示線性表時,其定義是 乙個儲存...

資料結構 線性表 2

package com.wjy.data structure.linearlist.common public inte ce nodepackage com.wjy.data structure.linearlist.common 單鏈表結點定義 public class slnode imple...

資料結構2 線性表

什麼是線性表 邏輯上具有線性結構的儲存結構 線性表的特點 線性表中每個元素型別相同 線性表分類 根據物理結構,分為順序儲存和鏈式儲存 順序儲存 順序表 順序表的特點 快速隨機訪問,查詢和修改效率高,增刪效率低 順序表的實現 1 定義順序表頭,2 順序表初始化,3 實現順序表的操作 順序表的操作 增加...