数据结构之链表--单链表
生活随笔
收集整理的這篇文章主要介紹了
数据结构之链表--单链表
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
Hello,大家好!好久不見了,之前一直在忙于一些瑣事,最近半個月內會將數據結構的各種數據結構實現出來,一個挺有意思的東西。
這次我將要介紹的是鏈表。鏈表有單鏈表,單向循環鏈表,雙向鏈表,雙向循環鏈表。其實這些理解透徹了還是很簡單的,接下來我將給大家一一介紹,歡迎大家收藏點贊。
首先鏈表的定義是:線性表的鏈式存儲結構稱為鏈表。每個節點包含數據域和找到下一個數據的地址的變量--在C語言中是指針。概念先介紹到這里吧!
以下是我的理解寫出來的代碼,如有可以優化的地方歡迎大家指出。
注意:代碼都經過實際檢驗。
#include<stdio.h> #include<stdlib.h>typedef struct Node {int data; //數據域Node * next; //指針域 }Node; //創建表頭 Node * createList() {Node* headNode = (Node*)malloc(sizeof(Node));headNode->next=NULL;return headNode; } //創建節點 Node * createNode(int data) {Node*newNode= (Node*)malloc(sizeof(Node));newNode->data=data;newNode->next=NULL;return newNode;}//頭插 void headInsertNode(Node * headNode,int data) {Node * pMove =createNode(data);//此地方要注意先要將頭節點后頭的節點地址保存到新節點的next域之中//再將新節點的地址保存到頭節點的后頭---先連后斷pMove->next = headNode->next;headNode->next = pMove;} //尾插 void tailInsertNode(Node *headNode, int data) {//尾插先要找到鏈表的尾部Node * pMove = headNode->next;Node * newNode = createNode(data);while (pMove->next!=NULL){pMove = pMove->next;}pMove->next = newNode; } //注意指定位置插入數據是插在指定位置之前,且是查找到的第一個指定元素之前插入 void posInsertNode(Node * headNode,int updata,int data) {Node * newNode = createNode(updata);Node * proNode = headNode;Node * posNode = headNode->next;while (posNode->data!=data){if (posNode->next == NULL){printf("你想插入的數據不存在\n");return;}proNode = posNode;posNode = posNode->next;}newNode->next = posNode;proNode->next = newNode; } //查找結點 void findNode(Node * headNode, int data) {Node* pMove = headNode->next;int x = 1;while (pMove->data!=data){++x;pMove = pMove->next;}if (pMove->data == data)printf("你想要查找的數據%d,在鏈表的第%d個位置\n", data, x);elseprintf("你想要找的數據%d并不存在!\n", data);} //改變指定位置的數據 void modifyNodeData(Node *headNode, int upData, int data) {Node * pMove = headNode->next;while (pMove->data!=data){pMove = pMove->next;}pMove->data = upData;} //刪除元素 void deleteNodeData(Node * headNode, int data) {Node * proNode = headNode;Node * pMove = headNode->next;while (pMove->data != data){proNode = pMove;pMove = pMove->next;}proNode->next = pMove->next;free(pMove); } //打印節點的數據 void printNode(Node * node) {Node * pMove = node->next;while (pMove){printf("%d-->", pMove->data);pMove = pMove->next;}printf("\n"); } int main() {Node * list = createList();for (int i = 0; i < 10; i++){headInsertNode(list, i);}printNode(list);for (int i = 9; i < 15; i++){tailInsertNode(list, i);}printNode(list);posInsertNode(list, 78, 73);printNode(list);findNode(list, 5);printNode(list);modifyNodeData(list, 45, 5);printNode(list);deleteNodeData(list, 6);printNode(list);system("pause");return 0; }總結
以上是生活随笔為你收集整理的数据结构之链表--单链表的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: c++ mqtt客户端_MQTT详解及百
- 下一篇: matlab 图像矢量量化,MATLAB