資料結構 單鏈表的基本操作

2021-06-27 00:24:22 字數 3702 閱讀 6571

最近正好在複習資料結構,鍊錶作為比較重要的資料結構,特地自己實現了一遍。

首先我們要理解幾個概念:

1、鏈式儲存是最常用的儲存方式之一,可以表示線性和非線性的資料結構。

2、按照鏈式儲存的線性表簡稱為鍊錶。

3、單鏈表是一種鏈式訪問的資料結構,用一組位址任意的儲存單元來存放線性表中的資料元素。

4、鍊錶由節點構成,每個節點的構成為:元素+指標(指向後繼元素)

理解這幾個基本的概念之後,考慮如何鍊錶的功能:1、初始化鍊錶2、建立鍊錶3、新增元素(往頭部新增、往尾部新增、中間新增)4、刪除元素(頭刪除、尾刪除、中間刪除)5、查詢節點6、查詢元素7、修改節點元素8、清空鍊錶9、鍊錶大小10、逆序鍊錶

除此之外,在具體實現上為了方便起見,我們可以為鍊錶設定乙個頭節點。

下面見**:

#include#include#includetypedef int elemtype;

typedef struct nodenode;

//1、初始化鍊錶

void init(node** pnode)

//1、建立鍊錶

node* create(node* phead)

memset(p1, 0, sizeof(node));

printf("輸入節點值(非正數結束):");

scanf_s("%d", &p1->element);//輸入新節點

p1->next = null;

while (p1->element > 0)

else

p2 = p1;//重新讓p2做尾節點

p1 = (node*)malloc(sizeof(node));

if (p1 == null || p2 == null)

memset(p1, 0, sizeof(node));

printf("輸入節點值(非正數結束):");

scanf_s("%d", &p1->element);

p1->next = null;

} printf("鍊錶建立成功\n");

return phead;

}//列印鍊錶

void print(node* phead)

else

printf("\n"); }}

//清空鍊錶

void clear(node* phead)

while (phead->next != null)

printf("鍊錶清空\n");

}//鍊錶長度

int size(node* phead)

printf("鍊錶長度%d\n", size);

return size;

}//鍊錶是否為空

int isempty(node* phead)

printf("鍊錶非空\n");

return 0;

}//獲取指定位置的元素

elemtype get(node* phead, int pos)

if (phead == null)

while (phead != null)

phead = phead->next;

} if (i < pos)

return phead->element;

}elemtype *getaddr(node* phead, elemtype x)

if (x < 0)

while ((phead->element != x) && (phead->next != null))

if ((phead->element != x) && phead != null)

if (phead->element == x)

return &(phead->element);

}//修改指定位置的元素

int modify(node* pnode, int pos, elemtype x)

if (pos < 1)

while (phead != null)

phead = phead->next;

} if (i < pos)

pnode = phead;

pnode->element = x;

printf("modifyelem函式執行,修改%d出值為%d\n",pos,x);

return 1;

}//插入頭節點

int inserthead(node** pnode, elemtype ele)

//插入尾節點

int insertlast(node** pnode, elemtype ele)

phead->next = pinsert;

*pnode = ptmp;

printf("向表尾插入元素:%d\n",ele);

return 1;

}//在指定位置插入元素

int insertmid(node** pnode, int pos, elemtype ele)

if (pos < 1)

while (phead != null)

phead = phead->next;

} if (i < pos)

nhead = phead->next;//儲存後乙個節點

pinsert->next = phead->next;

phead->next = pinsert;

printf("插入中間節點\n");

return 1;

}//刪除指定位置元素

int deletemidele(node** pnode, int pos)

while (phead != null)

phead = phead->next;

} de = phead->next;

phead->next=de->next;

printf("刪除元素成功\n");

return 1;

}//刪除第乙個節點

int delhead(node** pnode)

if (phead->next == null)

phead = phead->next;//設定原先頭節點的下乙個節點為頭節點

*pnode = phead;

printf("刪除頭節點成功\n");

return 1;

}//刪除尾節點

int dellast(node** pnode)

while (phead->next!= null)

printf("刪除尾節點\n");

free(phead);

predel->next = null;

return 1;

}//逆序鍊錶

void reverse(node** pnode)

current = *pnode;//a1

while (current->next!=null)

printf("逆序鍊錶\n");

}void main()

1、建立另外乙個單獨鍊錶,用來儲存待逆序鍊錶遍歷過成中從後往前的節點;

2、每次遍歷過程中,當前元素都與第乙個元素交換位置。比如:1,2,3,4逆序

第一次:2,1,3,4

第二次:3,2,1,4

第三次:4,3,2,1

(**中使用的便是這種方法)

從演算法複雜度來說,建議採用第二種。當然還有其他的方案,此處不做說明了。

資料結構 單鏈表基本操作

實現單鏈表的初始化,頭插法建表,尾插法建表,查詢元素,插入元素,刪除元素等功能 include using namespace std define elemtype char typedef struct node node,linklist 初始化單鏈表 void initlist linkli...

《資料結構》單鏈表基本操作實現

define ok 1 define error 1 typedef int elemtype typedef int status typedef struct node lnode,linklist 構造空表 status initlist linklist l void creatlist l...

資料結構2 單鏈表基本操作

單鏈表操作 初始化 建立單鏈表 尾插 判空 求長度 取第i個元素 查詢某元素位序 插入 刪除 include include define ok 1 define error 0 typedef int status typedef int elemtype typedef struct lnode...