C语言模拟单向链表
来源:互联网 发布:期权模拟交易软件 编辑:程序博客网 时间:2024/06/11 08:28
Main.c文件:#include <stdio.h>#include <stdlib.h>#include "myList.h"/* *author:Ryze *date:2016/11/26 21:50 *introduce:模拟单向链表 */int main(int argc, char *argv[]){ //创建node Node *list = createList(); //添加元素 append(1,list);//0 append(2,list);//1 append(3,list);//2 append(4,list);//3 append(5,list);//4 //遍历列表 printf("----------添加后的列表---------\n"); traverse(list); //插入数据 insert(3,0,list); //遍历node printf("----------插入后的列表---------\n"); traverse(list); //删除一个节点 del(3,list); //再次遍历node printf("----------删除后的列表---------\n"); traverse(list); return 0;}myList.h文件:#ifndef myLIST_H#define myLIST_H#endif // myLIST_H//定义节点类型typedef struct Node{ int data;//数据域 struct Node *next;//指针域}Node;//声明myList常用函数Node *createList();//建立一个节点void append(int num, Node *l);//向链表末尾添加数据void insert(int index, int num, Node *l);//向列表的指定位置插入数据void del(int index, Node *l);//删除列表中指定位置的数据void traverse(Node *l);//遍历ListmyList.c文件:#include <stdio.h>#include <stdlib.h>#include "myList.h"//建立一个列表Node *createList(){ //创建一个头节点 Node *head = malloc(sizeof(Node));//创建一个头节点 head->data = NULL; head->next = NULL; return head;//返回头节点}//向列表中添加数据void append(int num,Node *l){ Node *temp = l; Node *end = NULL; while(temp=temp->next){ end = temp; //printf("节点地址为:%p\n",temp); } Node *node = malloc(sizeof(Node)); node->data = num; node->next = NULL; //若是第一个节点,则直接添加到头节点后面 if(end == NULL) { l->next = node; //否则添加到最后一个节点后面 }else{ end->next = node;//将节点连接起来 }}//向列表的指定位置插入数据void insert(int index, int num, Node *l){ //创建待插入的节点,并初始化指定数值 Node *node = malloc(sizeof(Node)); node->data = num; int i = 0;//将i初始化为-1 Node *temp = l; //定义插入点的前一个节点和后一个节点 Node *befor, *after; while(temp = temp->next) { //寻找前后的节点 //开始的第一个节点的下标为0 if(i == index - 1) { befor = temp; } if(i == index) { after = temp; break; } i++; } //判断插入点是否为列表最后 if(after == NULL) { append(num,l); }else{ //修改连接关系 befor->next = node; node->next = after; }}//删除列表中指定位置的数据void del(int index, Node *l){ int i = 0; Node *temp = l; //定义删除点的节点,前一个节点,后一个节点 Node *befor, *current, *after = NULL; //查找指定位置的数据 while(temp = temp->next) { if(i == index - 1) { befor = temp; } if(i == index) { current = temp; } if(i == index + 1) { after = temp; break; } i++; } //修改连接关系 befor->next = after; free(current);}//遍历列表void traverse(Node *l){ Node *temp = l; int i = 0; while((temp = temp->next) != NULL) { printf("第%d个节点的值为 ---- %d\n",i,temp->data); i++; }}执行结果:
0 0
- C语言模拟单向链表
- C语言单向链表
- C语言 单向链表
- C语言单向链表
- c语言-单向链表
- C语言单向链表的实现
- 求助 C语言的单向链表
- C语言实现的单向链表
- 单向链表C语言实现
- C语言 单向链表倒序
- 单向链表的C语言实现
- c语言的单向链表
- 自己实现C语言单向链表
- 纯c语言单向链表
- C语言之单向链表
- C语言单向链表的建立
- C语言单向链表的实现
- C语言实现单向链表
- A Brief Introduction of Deep Learning
- Android7.0适配心得
- codeforces379a Alyona and mex
- 四连杆运动仿真
- 放苹果
- C语言模拟单向链表
- caffe学习笔记(1)--配置及导入自己的数据
- 漫谈继承技术(七)
- React native和原生之间的通信
- 检测输入的字符是否为“g”
- MySQL及数据库设计小结
- 机房收费系统---可行性研究报告
- (笔记)Spring MVC学习指南_验证器
- 如何做好一名软件开发团队的领导者