数据结构之链表--单链表
生活随笔
收集整理的這篇文章主要介紹了
数据结构之链表--单链表
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
Hello,大家好!好久不見了,之前一直在忙于一些瑣事,最近半個月內(nèi)會將數(shù)據(jù)結(jié)構(gòu)的各種數(shù)據(jù)結(jié)構(gòu)實現(xiàn)出來,一個挺有意思的東西。
這次我將要介紹的是鏈表。鏈表有單鏈表,單向循環(huán)鏈表,雙向鏈表,雙向循環(huán)鏈表。其實這些理解透徹了還是很簡單的,接下來我將給大家一一介紹,歡迎大家收藏點贊。
首先鏈表的定義是:線性表的鏈?zhǔn)酱鎯Y(jié)構(gòu)稱為鏈表。每個節(jié)點包含數(shù)據(jù)域和找到下一個數(shù)據(jù)的地址的變量--在C語言中是指針。概念先介紹到這里吧!
以下是我的理解寫出來的代碼,如有可以優(yōu)化的地方歡迎大家指出。
注意:代碼都經(jīng)過實際檢驗。
#include<stdio.h> #include<stdlib.h>typedef struct Node {int data; //數(shù)據(jù)域Node * next; //指針域 }Node; //創(chuàng)建表頭 Node * createList() {Node* headNode = (Node*)malloc(sizeof(Node));headNode->next=NULL;return headNode; } //創(chuàng)建節(jié)點 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);//此地方要注意先要將頭節(jié)點后頭的節(jié)點地址保存到新節(jié)點的next域之中//再將新節(jié)點的地址保存到頭節(jié)點的后頭---先連后斷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; } //注意指定位置插入數(shù)據(jù)是插在指定位置之前,且是查找到的第一個指定元素之前插入 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("你想插入的數(shù)據(jù)不存在\n");return;}proNode = posNode;posNode = posNode->next;}newNode->next = posNode;proNode->next = newNode; } //查找結(jié)點 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("你想要查找的數(shù)據(jù)%d,在鏈表的第%d個位置\n", data, x);elseprintf("你想要找的數(shù)據(jù)%d并不存在!\n", data);} //改變指定位置的數(shù)據(jù) 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); } //打印節(jié)點的數(shù)據(jù) 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; }總結(jié)
以上是生活随笔為你收集整理的数据结构之链表--单链表的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: c++ mqtt客户端_MQTT详解及百
- 下一篇: 查看socket缓冲区数据_什么是soc