宜昌营销型网站,营销推广策划方案范文,国外网站为啥速度慢,设计一套企业网站设计报价Hello#xff0c;大家好#xff01;好久不见了#xff0c;之前一直在忙于一些琐事#xff0c;最近半个月内会将数据结构的各种数据结构实现出来#xff0c;一个挺有意思的东西。
这次我将要介绍的是链表。链表有单链表#xff0c;单向循环链表#xff0c;双向链表…Hello大家好好久不见了之前一直在忙于一些琐事最近半个月内会将数据结构的各种数据结构实现出来一个挺有意思的东西。
这次我将要介绍的是链表。链表有单链表单向循环链表双向链表双向循环链表。其实这些理解透彻了还是很简单的接下来我将给大家一一介绍欢迎大家收藏点赞。
首先链表的定义是线性表的链式存储结构称为链表。每个节点包含数据域和找到下一个数据的地址的变量--在C语言中是指针。概念先介绍到这里吧!
以下是我的理解写出来的代码如有可以优化的地方欢迎大家指出。
注意代码都经过实际检验。
#includestdio.h
#includestdlib.htypedef struct Node
{int data; //数据域Node * next; //指针域
}Node;
//创建表头
Node * createList()
{Node* headNode (Node*)malloc(sizeof(Node));headNode-nextNULL;return headNode;
}
//创建节点
Node * createNode(int data)
{Node*newNode (Node*)malloc(sizeof(Node));newNode-datadata;newNode-nextNULL;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;
}