線性表之鏈式儲存結構 單鏈表相關演算法

2021-08-13 17:25:39 字數 3173 閱讀 2006

在儲存結構上,不需要連續的儲存空間,需要上乙個結點的指標域 指向下乙個結點即可,找到乙個結點就可以找到下乙個結點。

下面看**:

#include #include #define	error 0

#define ok 1

typedef int eletype;

typedef int status;

typedef struct node node;

//鍊錶元素

struct node

;typedef node* linklist;

void printlinklist(const linklist * const list)

int i = 1;

linklist li = (*list)->next;//從頭結點後面第乙個結點開始遍歷

while (li)//最後乙個元素沒有指向,不會進行迴圈。

printf("\n");

return;

}//建立擁有頭結點的鍊錶

//頭插法建立鍊錶,往煉表中新增元素,新建立的的元素始終在頭結點後面類似 頭指標 -> 頭結點->an->an-1->an-2 ...-> a1

//元素的資料 隨機生成100以內的數字

status creatlinklistinhead(linklist *list,int n)

li->next = null;//初始頭結點沒有指向

for ( i = 0; i < n; i++)

node->data = rand()%100;//除以100取餘的到100以內的數字,不包括100,如果含100 就需要+1

node->next = li->next;//新新增的元素指標域 指向頭結點後面的結點

li->next = node;//頭結點指標域 指向新增加的元素

} *list = li;//通過指標 給外部鏈結串列賦值

return ok;

}//尾插法建立鍊錶,往煉表中新增元素,先新增的元素放前面,後新增的元素放後面,遵循先來後到的道理

status creatlinklistintail(linklist *list, int n)

li->next = null;//初始頭結點指向

*list = li;//給通過外部鏈結串列賦值,指向頭結點,此時 list 和 li 都指向頭結點。

for ( i = 0; i < n; i++)

node->data = rand() % 100;//除以100取餘的到100以內的數字,不包括100,如果含100 就需要+1

li->next = node;//新結點 放到鍊錶末尾

li = node;//移動鍊錶指標指向最新鍊錶最後乙個元素,為了下次迴圈在鍊錶末尾新增元素

//temp = node;

} //最後表尾元素指標域 設定null

li->next = null;

//*list = li;//一定要放在for迴圈前面,不然頭結點的記憶體空間沒有指向!起初l指向頭結點,但是進入for迴圈後l的指向發生改變要移動指向最新新增的結點元素。

return ok;

}//獲取鍊錶元素資料,通過指標返回 鍊錶第i個元素的 資料

//i還是按國人的順序來吧,從1開始

status getelement(linklist list, int position,eletype *e)

linklist li = list;

int i = 1;

while (li && inext;

} if (null == li || position > i)

//通上面 while迴圈 當i = position 跳出迴圈 ,li 此時指向鍊錶 第position位置的 前面乙個結點。

*e = li->next->data;

return ok;

}//往煉表中第position位置 插入元素,元素資料為 e

//元素位置從1開始數

status insertlinklist(linklist *list,int position,eletype e)

linklist li = * list;

int i = 1;

while ( li && inext;

} if (null == li || position > i)

//通上面 while迴圈 當i = position 跳出迴圈 ,li 此時指向鍊錶 第position位置的 前面乙個結點。

node->data = e;

node->next = li->next;//讓 插入結點指標域指向 原來位置的結點

li->next = node;//讓插入結點位置前的結點 指向插入結點

return ok;

}//在鍊錶第position位置 刪除元素,通過指標返回 刪除元素的資料內容

status dellinklistele(linklist *list, int position, eletype *e)

linklist li = *list;

node * node = null;

int i = 1;

while (li && inext;

} if (null == li || position > i)

//通上面 while迴圈 當i = position 跳出迴圈 ,li 此時指向鍊錶 第position位置的 前面乙個結點。

node = li->next;//儲存要刪除元素的位址

li->next = node->next;//讓刪除元素前置結點 指向 刪除元素 直接後繼結點。然後就可以釋放 刪除結點的空間了。

*e = node->data;//將刪除元素資料通過指標修改返回

free(node);//釋放刪除元素空間

return ok;

}//清空整個鍊錶,釋放指標指向的記憶體

status freelinklist(linklist *list)

//將頭結點指標域設定為null

(*list)->next = null;

return ok;

}int main(void)

結果驗證截圖:

線性表的鏈式儲存結構之單鏈表

void initlist list plist 初始化 plist next null 2 插入元素 insert 1 宣告結點p指向鍊錶第乙個結點 2 當p null時,就遍歷鍊錶,讓p的指標向後移動,不斷指向下乙個結點,i 3 若到鍊錶末尾p為空,則說明第i個元素不存在 4 否則查詢成功,在系...

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

線性表中每個節點有唯一的前趨節點和後繼節點 每個 物理節點增加乙個指向後繼節點的指標域 單鏈表 每個物理節點增加乙個指向後繼節點和前趨節點的指標域 雙鏈表 單鏈表的特點 當訪問乙個節點後,只能接著它的後繼節點,而無法訪問它的前趨節點。1.單鏈表插入節點 操作 將值為x的新節點 s插入到 p節點之後 ...

線性表 鏈式儲存結構之單鏈表

ifndef linklist h define linklist h include include include template class node node const elemtype data data data next null node const elemtype data,...