線性表鏈式儲存設計與實現

2021-09-21 06:52:18 字數 3031 閱讀 1786

#ifndef _mylinklist_h_

#define _mylinklist_h_

typedef void linklist;

typedef struct _tag_linklistnode

linklistnode;

linklist* linklist_create();

void linklist_destroy(linklist* list);

void linklist_clear(linklist* list);

int linklist_length(linklist* list);

int linklist_insert(linklist* list, linklistnode* node, int pos);

linklistnode* linklist_get(linklist* list, int pos);

linklistnode* linklist_delete(linklist* list, int pos);

#endif

注意相應的控制代碼的定義 tlinklist

#include #include #include #include "linklist.h"

typedef struct _tag_linklist

tlinklist; //定義乙個底層的控制代碼

linklist* linklist_create()

void linklist_destroy(linklist* list) //釋放記憶體

}void linklist_clear(linklist* list) //初始化

tlist = (tlinklist*)list;

tlist->length = 0;

tlist->header.next = null;

}int linklist_length(linklist* list)

tlist = (tlinklist*)list;

return tlist->length;

}int linklist_insert(linklist* list, linklistnode* node, int pos)

tlist = (tlinklist*)list;

current = &(tlist->header); //重點:讓輔助指標變數指向鍊錶頭部

for (i = 0; i < pos && (current->next != null); i++) //防止pos位置太大,超過鍊錶長度

//1 讓node連線後續鍊錶

node->next = current->next; //鍊錶是單向的,3號位置儲存在2號位置的next域中

//2 讓前面的節點連線到新的node節點

current->next = node;

tlist->length++;

return ret;

}linklistnode* linklist_get(linklist* list, int pos)

tlist = (tlinklist*)list;

current = &(tlist->header); //重點:讓輔助指標變數指向鍊錶頭部

for (i = 0; i < pos && (current->next != null); i++) //防止pos位置太大,超過鍊錶長度

return current->next;

}linklistnode* linklist_delete(linklist* list, int pos)

tlist = (tlinklist*)list;

current = &(tlist->header); //重點:讓輔助指標變數指向鍊錶頭部

for (i = 0; i < pos && (current->next != null); i++) //防止pos位置太大,超過鍊錶長度

//1 快取被刪除的節點位置

ret = current->next;

//2 連線

current->next = ret->next; //這樣刪除到最後乙個會出現ret=null而沒有ret->next,引發異常?

tlist->length--;

return ret;

}

#include #include #include #include "linklist.cpp"

typedef struct _teacher

teacher;

void main()

ret = linklist_insert(list, (linklistnode*)&t1, 0); //頭插法 插入線性表

ret = linklist_insert(list, (linklistnode*)&t2, 0); //頭插法

ret = linklist_insert(list, (linklistnode*)&t3, 0); //頭插法

ret = linklist_insert(list, (linklistnode*)&t4, 0); //頭插法

ret = linklist_insert(list, (linklistnode*)&t5, 0); //頭插法,所以t5是第乙個

len = linklist_length(list);

//遍歷

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

printf("tmp->age: %d \n", tmp->age);

} //刪除元素

while (linklist_length(list) > 0) //此處不能用len替代,因為linklist_length(list)一直在變

printf("tmp->age: %d \n", tmp->age);

} linklist_destroy(list);

system("pause");

}

小結點linklistnode與業務結點teacher的連線問題

會分析相應技術場景圖(圖的繪畫)

線性表 鏈式儲存實現

定義 邏輯上連續,物理上可以分散的線性表儲存方式。可以充分利用不連續空間,但是由於需要儲存後繼節點指標,故空間開銷大。結構定義 定義乙個頭節點 其儲存帶值節點個數 和 第乙個帶值節點指標 typedef struct linklistlist 基本操作 list createlist l data ...

線性表鏈式儲存設計與實現 API實現

基本概念 鏈式儲存定義 為了表示每個資料元素與其直接後繼元素之間的邏輯關係,每個元素除了儲存本身的資訊外,還需要儲存指示其直接後繼的資訊。表頭結點 鍊錶中的第乙個結點,包含指向第乙個資料元素的指標以及鍊錶自身的一些資訊 資料結點 鍊錶中代表資料元素的結點,包含指向下乙個資料元素的指標和資料元素的資訊...

線性表鏈式儲存

線性表鏈式儲存結構的建立 刪除最小值結點 值唯一 刪除某個指定值 不唯一 就地逆置 反向輸出 遞增排序 刪除重複結點 根據奇偶序號劃分成兩個帶頭結點的單鏈表。include stdio.h include stdlib.h typedef struct lnode lnode,llist void ...