写写基于C语言的单向链表的基本操作的实现,
包括输入初始化、
判断链表是否为空、
获取链表的长度、
在链表指定位置插入数据、
修改指定位置的数据、
删除指定位置的数据、
查找指定位置的数据内容、
查找数据内容对应的位置在哪、
遍历链表、
清空链表数据、
删除链表数据。

直接贴上代码,已在devc++上验证通过,内容中如有不正确的地方,望留言指出。

linear_link_line.h头文件

typedef int ElemType;
typedef struct {ElemType data;struct line_node_t *next;
}line_node_t;line_node_t* initial_list(line_node_t* list);
int is_list_empty();
int get_list_length();
int insert_list_pos_data(line_node_t* list, int pos, ElemType data);
int modify_list_pos_data(line_node_t* list, int pos, ElemType data);
int delete_list_pos_data(line_node_t* list, int pos);
int find_list_pos_data(line_node_t* list, int pos, ElemType *data);
int find_list_data_of_pos(line_node_t* list, ElemType e, int *pos);
void dump_list(line_node_t *list);
void clean_list(line_node_t *list);
line_node_t* destroy_list(line_node_t *list);
int test_func();

linear_link_line.c的方法实现

#include <stdio.h>
#include "linear_link_line.h"int is_list_empty(line_node_t* list) {return list->next == NULL;
}int get_list_length(line_node_t* list) {int len = 0;if(is_list_empty(list)) return 0;line_node_t* p = list->next;while(p) {len++;p = p->next;}return len;
}line_node_t* initial_list(line_node_t* list) {int x;line_node_t *p = NULL;line_node_t *q = NULL;p = list;while(1) {scanf("%d", &x);if (x == -1) {printf("initial_list input done.\n");break;}q = (line_node_t *)malloc(sizeof(line_node_t));if (q) {q->data = x;q->next = NULL;p->next = q;p = p->next;} else {printf("initial_list malloc failed!\n");return NULL;}}return list;
}int insert_list_pos_data(line_node_t* list, int pos, ElemType data) {int max_len = get_list_length(list);if (pos < 0 || pos > max_len) {printf("insert_list_data pos:%d is invalid! \n", pos);return -1;}line_node_t *p = list;int j = 0;//move point to pos positionwhile (p && j < pos -1) {j++;p = p->next;}line_node_t *insert_point = (line_node_t *)malloc(sizeof(line_node_t));insert_point->data = data;insert_point->next = p->next;p->next = insert_point;//printf("insert_list_data insert suceess!\n");return 0;
}int delete_list_pos_data(line_node_t*list, int pos) {line_node_t *p = list;int j = 0;while (p && j < pos -1) {j++;p = p->next; }line_node_t *q = p->next;p->next = q->next;free(q);//printf("delete_list_data success! \n");return 0;
}int find_list_pos_data(line_node_t* list, int pos, ElemType *data) {line_node_t *p = list->next;int j = 0;while(p && j < pos -1) {p = p->next;j++;}if (j > pos -1) {printf("find_list_data cannot find pos:%d \n", pos);return -1;}*data = p->data;printf("\nfind_list_data found pos:%d data is: %d \n", pos, *data);return *data;
}int find_list_data_of_pos(line_node_t* list, ElemType e, int *pos) {line_node_t *p = list->next;int ret = 0;int j = 0;while (p) {j++;p = p->next;if (p->data == e) {*pos = j + 1;ret = *pos;//printf("find_list_data_pos found %d in pos:%d \n", e, j + 1);break;}}return ret;
}int modify_list_pos_data(line_node_t* list, int pos, ElemType data) {line_node_t *p = list->next;int j = 0;while(p && j < pos -1) {j++;p = p->next;}p->data = data;return 0;
}void dump_list(line_node_t *list) {line_node_t *p = NULL;p = list->next;while(p) {printf("dump_list value is %d \n", p->data);p = p->next;}return;
}void clean_list(line_node_t *list) {line_node_t *p = NULL;p = list->next;while(p) {p->data = 0; p = p->next;}printf("clean_list done. \n");return;
}//思路:一直让p指向head的下一个,然后让head的next指向p的next,把p释放掉  循环到最后就剩下head的next为NULL了
line_node_t* destroy_list(line_node_t *list) {printf("destroy_list start.\n");line_node_t *p = NULL;while (list->next) {p = list->next;list->next = p->next;free(p);} printf("destroy_list done.\n");return NULL;
}int test_func() {printf("=== please initial list data, entry -1 end loop === \n");return 0;
}

测试方法my_main.c


int main() {test_func();line_node_t list;initial_list(&list);dump_list(&list);//get list lengthint len = get_list_length(&list);printf("get_list_length len is: %d \n", len);//insert data to listprintf("\ninsert pos 2 data is 10 \n");insert_list_pos_data(&list, 2, 10);dump_list(&list);//delete position dataprintf("\ndelete pos 3 data \n");delete_list_pos_data(&list, 3);dump_list(&list);//find postion data value//ElemType data = NULL;ElemType data = find_list_pos_data(&list, 2, &data);printf("find pos 2 value is %d\n", data);//find data position in listint pos = find_list_data_of_pos(&list, 3, &pos);printf("\nfind value %d is in pos:%d \n", 3, pos);//modify position dataprintf("\nmodify pos:%d to %d\n", 3, 20);modify_list_pos_data(&list, 3, 20);dump_list(&list);printf("\nclean list content. \n");clean_list(&list);dump_list(&list);printf("\n destroy list.\n");destroy_list(&list);dump_list(&list);int len2 = get_list_length(&list);printf("get_list_length len2 is: %d \n", len2);return 0;
}

运行结果:

=== please initial list data, entry -1 end loop ===
1
2
3
4
5
-1
initial_list input done.
dump_list value is 1
dump_list value is 2
dump_list value is 3
dump_list value is 4
dump_list value is 5
get_list_length len is: 5insert pos 2 data is 10
dump_list value is 1
dump_list value is 10
dump_list value is 2
dump_list value is 3
dump_list value is 4
dump_list value is 5delete pos 3 data
dump_list value is 1
dump_list value is 10
dump_list value is 3
dump_list value is 4
dump_list value is 5find_list_data found pos:2 data is: 10
find pos 2 value is 10find value 3 is in pos:3modify pos:3 to 20
dump_list value is 1
dump_list value is 10
dump_list value is 20
dump_list value is 4
dump_list value is 5clean list content.
clean_list done.
dump_list value is 0
dump_list value is 0
dump_list value is 0
dump_list value is 0
dump_list value is 0destroy list.
destroy_list start.
destroy_list done.
get_list_length len2 is: 0

C语言的单向链表的操作方法相关推荐

  1. c语言链表如何做成环,在C语言中单向链表环测试并返回环起始节点的实现方法...

    小编想问大家一个问题,就是如果我们需要进行测试一个单向链表是否存在环,应该使用什么方法才是最好的呢?如果大家还不知道有什么方法的话,那就接着往下面看哟!因为今天小编就要为大家介绍一下:在C语言中单向链 ...

  2. C语言实现单向链表、双向链表、循环链表

    1. 单向链表 /*创建单向链表*/ #include <stdio.h> #include <stdlib.h> #include <malloc.h>struc ...

  3. c语言单向链表插入字符串,C语言之单向链表

    1,单向链简洁. 单向链表(单链表)是链表的一种,其特点是链表的链接方向是单向的,对链表的访问要通过顺序读取从头部开始:链表是使用指针进行构造的列表:又称为结点列表,因为链表是由一个个结点组装起来的: ...

  4. C语言基础-单向链表静态结构与动态结构删除(跳过)结点

    非真正意义上的删除节点,而是将该链表其中一个结点断开,连接到下一个结点 静态链表示例题目: 为五个学生的信息建立一个静态链表,每个学生信息结构如下: 学号 姓名 成绩 要求输入一个学号值,删除链表中该 ...

  5. c语言编程单向链表排序,【分享】C语言 简单链表创建 排序 输出

    [Asm] 纯文本查看 复制代码#include #include//为动态分配提供函数库 typedef struct node { int num;//数据域 struct node *next; ...

  6. 链表C语言实现--单向链表

    线性结构的链式存储也称为链表,相比于顺序表,链表能够解决顺序表中空间资源浪费问题以及空间不足的问题.链表的每一个结点包含数据域和指针域,而每一个结点在内存中的地址是不连续的,且能适应动态变化.在数据插 ...

  7. 【C语言】单向链表排序、合并、逆序、分离(链表的头节点不储存数据)

    一.排序 编写程序,在第1题(第1题:编写程序,建立2个带头结点单链表,输入若干整数将正整数插入第1个单链表,将负整数插入第2个单链表,插入前和插入后单链表保持递增或相等次序,显示2个单链表,最后销毁 ...

  8. Golang 操作单向链表的应用实例

    代码: /*使用带head头节点的单向链表实现-水浒传英雄排行榜管理:1)完成对英雄人物的增删改查操作.2)第一种方法:在添加英雄时,直接添加到链表的尾部3)第二种方法:在添加英雄时,根据排名将英雄插 ...

  9. 长风破浪会有时:单向链表、双向链表和循环链表图文解析

    链表的种类有很多.我们常常会用到的链表有:单向链表.双向链表和循环链表. 链表不同于数组的地方在于:它的物理存储结构是非连续的,也就是说链表在内存中不是连续的,并且无序.它是通过数据节点的互相指向实现 ...

最新文章

  1. winform频繁刷新导致界面闪烁解决方法
  2. salesforce 零基础学习(六十二)获取sObject中类型为Picklist的field values(含record type)...
  3. 【数据结构与算法】之深入解析“两两交换链表中的节点”的求解思路与算法示例
  4. JAVA错误日志(part1)--编码GBK的不可映射字符
  5. 学三极管能遇到这篇巧文,我太幸福了!
  6. 3D点云论文汇总-实时更新
  7. 【less-3】sqli-labs靶场第三关
  8. 解题报告:poj2689 Prime Distance
  9. python画圣诞树_python画圣诞树
  10. redis配置认证密码以及远程访问
  11. 第五十篇、OC中常用的第三插件
  12. vue中的事件绑定v-on指令
  13. 计算机考研浙江理工和江苏大学,杭州电子科技大和浙江理工大学这两所大学怎么样?哪所好?...
  14. 数据库导出数据字典(MySQL)
  15. BASH SHELL ls -l 输出了什么
  16. 1~20以内的加减法
  17. 算法 - 随机密码生成算法
  18. vulnhub-Brainpan (考点:windows exe和linux elf下的两种缓冲区溢出)
  19. 程序员述职报告和转正
  20. [Linux] 读书笔记之:Linux程序设计(第4版)(ch1-7) [ 学如逆水行舟,不进则退 ]...

热门文章

  1. 评论:互联网的冬天还有多远?
  2. 明确C++风格的类型转换的用法
  3. 收款神器!解读聚合收款码背后的原理,你都知道吗?
  4. mysql dba证书挂靠_这7种情况都叫“证书挂靠”!看看你是否在挂证的边缘试探?...
  5. h5点击后字体加粗出现下边框_人力资源管理论文格式(字体+版式+打印)
  6. vgh电压高了有什么_一文告诉你电压互感器的作用是什么?
  7. githup用户名密码怎么看_MacBook Pro 开机密码忘记解决方法
  8. Python跨文件引用模块
  9. 良心推荐:高品质音乐播放器Audirvana for Mac
  10. 信息检索 python_python-工程数据结构/信息检索和存储