fun.c

#include "head.h"
/** function:    创建节点//第一次是头结点  之后是普通节点* @param [ in] 无惨* @param [out] * @return      成功返回地址失败返回NULL*/
LinkedList create_node(){static int c = 1;//L是结点LinkedList L=(LinkedList)malloc(sizeof(struct Node));if(L==NULL)return NULL;//为单链表清空if(c){L->len=0;//头结点c=0;}else{L->data=0;}//防止单链表为野指针L->next=NULL;return L;
}/** function:    头插* @param [ in] 链表 插入的值* @param [out] * @return      成功返回0失败返回-1*/
int insert_head(LinkedList L,datatype d)
{//1.判断头结点是否存在if(L==NULL)return -1;//2.插入LinkedList p=create_node();if(p==NULL)return -1;//链接p->next=L->next;L->next=p;p->data=d;L->len++;return 0;
}/** function:    尾插* @param [ in] 头结点 插入的值* @param [out] * @return      成功返回0失败返回-1*/
int insert_tail(LinkedList L,datatype d)
{//1.判断头结点是否存在if(L==NULL)return -1;//2.尾插LinkedList s=create_node();LinkedList p=L;if(p==NULL)return -1;//for(int i=0;i<L->len;i++){p=p->next;}s->data=d;p->next=s;L->len++;return 0;
}/** function:    循环输出* @param [ in] * @param [out] * @return      */
void output(LinkedList L)
{//先判断L头结点是否存在printf("\n");if(L==NULL||L->len==0){printf("遍历失败\n");return;}//直到下一个节点不存在while(L->next){//while(L->next!=NULL)L=L->next;printf("%d\t",L->data);}printf("\n");
}/** function: 头删    * @param [ in] 头结点* @param [out] * @return      */
int delete_head(LinkedList L){if(L==NULL||L->len==0){printf("删除失败\n");return -1;}LinkedList q=L->next;L->next=q->next;free(q);q=NULL;L->len--;return 0;
}/** function:    尾部删除* @param [ in] * @param [out] * @return      */
int delete_tail(LinkedList L){if(L==NULL||L->len==0){printf("删除失败\n");return -1;}LinkedList p=L;for(int i=0;i<L->len-1;i++){p=p->next;}free(p->next);p->next=NULL;L->len--;return 0;
}/** function:    按位置插入* @param [ in] 位置、值* @param [out] * @return      */
int insert_sub(LinkedList L,int sub,datatype d){if(L==NULL||sub<1||sub>L->len+1)return -1;LinkedList p=create_node();if(p==NULL){printf("插入失败\n");return -1;}LinkedList q=L;for(int i=0;i<sub-1;i++){q=q->next; }p->next=q->next;q->next=p;p->data=d;L->len++;return 0;}/** function:    按位置删除* @param [ in] 下标* @param [out] * @return      */int delete_sub(LinkedList L,int sub){if(L==NULL||sub<1||sub>L->len)return -1;LinkedList o=L;for(int i=0;i<sub-1;i++){o=o->next;}LinkedList p=o->next;o->next=p->next;free(p);L->len--;return 0;}/** function:    按位置修改* @param [ in] 下标,值* @param [out] * @return      */
int alter_sub(LinkedList L,int sub,datatype d){if(L==NULL||sub<1||sub>L->len)return -1;for(int i=0;i<sub;i++){L=L->next;}L->data=d;return 0;}/** function:    按下标位置查找* @param [ in] 下标* @param [out] * @return      */
int find_sub(LinkedList L,int sub){if(L==NULL||sub<1||sub>L->len)return -1;for(int i=0;i<sub;i++){L=L->next;}printf("%d\n",L->data);return 0;}/** function:    按元素删除* @param [ in] 元素数据* @param [out] * @return      */
int delete_data(LinkedList L,datatype d){if(L==NULL)return -1;LinkedList p=L;LinkedList q=L;for(int i=0;i<L->len;i++){q=q->next;if(q->data==d){p->next=q->next;free(q);L->len--;return 0;}p=p->next;}return -1;}/** function:    按照元素查找* @param [ in] * @param [out] * @return      */
int find_data(LinkedList L,datatype d){if(L==NULL||L->len==0)return -1;LinkedList p=L;for(int i=0;i<L->len;i++){L=L->next;if(L->data==d){printf("%d\n",i);return i;}}return -1;
}/** function:    按照元素修改* @param [ in] * @param [out] * @return      */
int alter_data(LinkedList L,datatype d,datatype dt){if(L==NULL||L->len==0)return -1;LinkedList p=L;for(int i=0;i<L->len;i++){L=L->next;if(L->data==d){L->data=dt;return 0;}}return -1;
}/** function:    逆置* @param [ in] * @param [out] * @return      */
void reverse(LinkedList L){if(L==NULL||L->len<2)return;LinkedList p=L->next;//第一个节点 第二条链上的最后一个节点LinkedList q=p->next;//这条链上的头节点LinkedList t=q;     //定义移动节点tLinkedList s=q->next; //定义移动节点sq->next=p;      //把第二个节点指向第一个节点(q为第二条链的头结点)while(1){if(s->next==NULL){//判断s是否为最后一个节点s->next=q;  //最后一个节点并为临时链的头结点L->next=s;  //把这条链归为本链p->next=NULL; //尾节点置为NULLbreak;}t=s;     //节点向下移动s=s->next;//节点向下移动t->next=q;//并入临时链表q=t;//更换临时链表的头结点}}/** function:    单链表空间释放* @param [ in] * @param [out] * @return      */LinkedList myfree(LinkedList L){if(L==NULL)return NULL;for(int i=0;i<L->len;i++){delete_head(L);}free(L);L=NULL;return L;
}/** function:    链表排序* @param [ in] * @param [out] * @return      */
void sort(LinkedList L){if(L==NULL||L->len<2)return;while(L->next){LinkedList s=L;while(s){if(L->data>s->data){datatype d=L->data;L->data=s->data;s->data=d;}s=s->next;}L=L->next;}
}

main.c

void main()
{LinkedList L=create_node();//插入几个数据元素int n;datatype d;printf("请输入要插入几个数据元素\n");scanf("%d",&n);for (int i=0;i<n ;i++){printf("请输入要插入的元素\n");scanf("%d",&d);//    insert_head(L,d); //头插insert_tail(L,d);//尾插}    //输出output(L);printf("------------------------\n");//头删除delete_head(L);output(L);printf("------------------------\n");//尾删delete_tail(L);output(L);printf("------------------------\n");//按位置插入printf("请输入要插入的下标\n");int sub;scanf("%d",&sub);printf("请输入要插入的值\n");scanf("%d",&d);insert_sub(L,sub,d);output(L);printf("------------------------\n");//按位置删除printf("请输入要删除的下标\n");scanf("%d",&sub);delete_sub(L,sub);output(L);//按位置修改printf("请输入要修改的下标\n");scanf("%d",&sub);printf("请输入要修改的值\n");scanf("%d",&d);alter_sub(L,sub,d);output(L);printf("------------------------\n");//按下标位置查找printf("请输入要查找的下标\n");scanf("%d",&sub);find_sub(L,sub);printf("------------------------\n");//按元素查找printf("请输入要查找元素\n");scanf("%d",&d);find_data(L,d);
printf("------------------------\n");//按元素删除printf("请输入要删除的元素\n");scanf("%d",&d);delete_data(L,d);output(L);printf("-----------按照元素修改-------------\n");//按元素修改printf("请输入被修改的元素\n");scanf("%d",&d);datatype dt;printf("请输入要修改的元素\n");scanf("%d",&dt);alter_data(L,d,dt);output(L);printf("-----------节点逆置-------------\n");//节点逆置reverse(L);output(L);printf("------------排序------------\n");//排序sort(L);output(L);//空间释放myfree(L);
}

head.h

#ifndef HEAD_C
#define HEAD_C
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
typedef int datatype;
typedef struct Node{//数据域union{int len;datatype data;};//指针域struct Node *next;}*LinkedList;
LinkedList create_node();int insert_head(LinkedList L,datatype d);
int insert_tail(LinkedList L,datatype d);
void output(LinkedList L);
int delete_head(LinkedList L);
int delete_tail(LinkedList L);
int insert_sub(LinkedList L,int sub,datatype d);
int insert_sub(LinkedList L,int sub,datatype d);
int delete_sub(LinkedList L,int sub);
int alter_sub(LinkedList L,int sub,datatype d);
int find_sub(LinkedList L,int sub);
int delete_data(LinkedList L,datatype d);
int find_data(LinkedList L,datatype d);
int alter_data(LinkedList L,datatype d,datatype dt);
LinkedList myfree(LinkedList L);
void reverse(LinkedList L);
void sort(LinkedList L);#endif

ten、ten、ten相关推荐

  1. calendar 获取季度的第一天_Java日期查询:日、周、旬、月、季度、年等时间操作...

    在进行频次.周期业务处理的时候,需要查询日.周.旬.月.季度.年等周期时间,为此而写的一个时间工具类. import java.text.ParseException; import java.tex ...

  2. 人群计数最全代码、数据、论文合集

    2021.11.19更新: 人群计数 /Crowd Counting Rethinking Counting and Localization in Crowds:A Purely Point-Bas ...

  3. 简明python教程 --C++程序员的视角(四):容器类型(字符串、元组、列表、字典)和参考

    数据结构简介 Python定义的类型(或对象)层次结构在概念上可以划分为四种类别:简单类型.容器类型.代码类型 和内部类型. 可以将 PyObject 类之下的所有 Python 类划分为 Pytho ...

  4. Java面试宝典系列之基础面试题String、变量、类与对象、集合类、SSH(二)

    作者:egg 邮箱:xtfggef@gmail.com 微博:http://weibo.com/xtfggef 博客:http://blog.csdn.net/zhangerqing(转载请说明出处) ...

  5. GeoServer简介、下载、配置启动、发布shapefile全流程(图文实践)

    场景 Geoserver简介 GeoServer是OGC Web服务器规范的J2EE实现,利用GeoServer可以方便地发布地图数据,允许用户对特征数据进行更新.删除.插入操作,通过GeoServe ...

  6. Linux按照CPU、内存、磁盘IO、网络性能监测

    系统优化是一项复杂.繁琐.长期的工作,优化前需要监测.采集.测试.评估,优化后也需要测试.采集.评估.监测,而且是一个长期和持续的过程,不 是说现在优化了,测试了,以后就可以一劳永逸了,也不是说书本上 ...

  7. mysql ---- innodb-1- 体系结构、文件、表

    mysql的体系结构 连接池组件 管理服务和工具组件 sql接口组件 查询分析器组件 优化器组件 缓冲组件 插件式的存储引擎 物理文件 Mysql 区别预其他数据库最重要的特点就是插件式的表存储引擎 ...

  8. 性能优化CPU、内存、磁盘I/O、网络性能相关命令

    系统优化是一项复杂.繁琐.长期的工作,优化前需要监测.采集.测试.评估,优化后也需要测试.采集.评估.监测,而且是一个长期和持续的过程,不 是说现在优化了,测试了,以后就可以一劳永逸了,也不是说书本上 ...

  9. 《C++ Primer 5th》笔记(3 / 19):字符串、向量、迭代器和数组

    文章目录 命名空间的using声明 标准库类型string 定义和初始化string对象 直接初始化和拷贝初始化 string对象上的操作 读写string对象 读取未知数量的string对象 使用g ...

  10. 星期、月份、序号和日期_10

    目录 星期和月份 序数词 日期 本文章将学习英语中的星期.月份.序数词和日期. 星期和月份 让我们先从一星期中的日子和一年中的月份开始学起.在学习星期之前,要记得首字母大写,而且在日历中,每个星期从星 ...

最新文章

  1. 安全的交互通道 及 栈回塑检查与伪造
  2. flink 7-提交任务
  3. wince工业平板电脑_如何防止工业平板电脑温度过高?
  4. SQL Server创建数据库和数据的增删改查
  5. 中tr不能显示字符_垃圾文本识别中基本操作指南和错误总结,第三部分
  6. linux 网络管理
  7. yum httpd安装详解
  8. 全新语音 AI 芯片、两大 AI 开发者平台重磅推出,全方位解读科大讯飞全球 1024 开发者节!...
  9. Flash学习资源汇编
  10. Kafka从上手到实践 - 实践真知:搭建Kafka相关的UI工具 | 凌云时刻
  11. Android 视频裁剪 (含裁剪 View)
  12. 阿里巴巴矢量图标引用问题
  13. 数值分析(7)-非线性方程求根
  14. 非计算机专业买几寸电脑好,学习计算机网路技术专业,是不是需要买电脑啊
  15. 静态代码分析工具清单:开源篇
  16. 鹅厂DB吐槽大会,约你来战
  17. hdu 1067 Gap
  18. 计算机二级---关键必要掌握重点
  19. C#调用打印机,打印图片
  20. linux窗口切换快捷键_分配快捷键以在Linux上激活打开的应用程序窗口

热门文章

  1. [BZOJ1188][HNOI2007]分裂游戏
  2. press any key to boot from usb 解决方案
  3. 2019年第十届蓝桥杯A组省赛
  4. 天谕手游服务器今日可创建账号数已达上限,天谕堪称网易2020头号手游?内测人数爆满,玩家直呼爷青回...
  5. 史上最快的文件复制软件FastCopy
  6. 大疆Phantom无人机ios遥控软件Auotpilot
  7. cs224w(图机器学习)2021冬季课程学习笔记21 Scaling Up GNNs to Large Graphs
  8. 蓝桥杯 - 核桃的数量(最小公倍数)
  9. mt管理器java_MT管理器app
  10. starccm 的 java jdk_用java搞一下STARCCM带gui的脚本