当前位置: 首页 > 编程日记 > 正文

【数据结构】单链表的应用(C语言)

1、设计一个算法,求一个单链表中的节点数

2、设计一个算法,在一个单链表中值为y的结点前插入一个值为x的结点(值为x的新结点为成为值为y的结点前驱结点)

3、设计一个算法,判断单链表中各结点是否有序

4、设计一个算法,利用单链表中原来的结点空间逆转一个单链表

5、设计一个算法,将一个值为自然数的单链表拆分为两个单链表,原表中保留值为偶数的结点,而值为基数的结点按他们在原表中的相对次序组成一个新的单链表。

6、设计一个算法,对一个有序的单链表删除所有值大于x而不大于y的结点

下面是头文件(包括各种链表的算法,不足之处还望指正)

#ifndef HEAD_LINK_H_INCLUDED
#define HEAD_LINK_H_INCLUDED#include <stdio.h>
#include <stdlib.h>
typedef int datatype;
typedef struct link_node
{datatype info;struct link_node *next;
}N;//创建一个空链表
N *init()
{return NULL;
}//创建一个单链表(已知长度)
N *creat_length(int len,N *head)
{int a,i;N *p,*h=head,*q;if (len<1){return NULL;}else{for(i=1;i<=len;i++){scanf("%d",&a);p=(N*)malloc(sizeof(N));p->info=a;if(i==1){p->next=NULL;h=p;q=p;}else{q->next=p;q=p;p->next=NULL;}}return h;}
}//创建一个单链表(未知长度)
N* creat(N *head)
{printf("创建一个单链表,以输入-1作为结束!!!\n");N *p,*q,*h=head;int x;scanf("%d",&x);while(x!=-1){p=(N*)malloc(sizeof(N));p->info=x;p->next=NULL; if(!h){h=p;q=p;}else{q->next=p;q=p;}scanf("%d",&x);} return h;
} //输出单链表中各节点的值
void display (N *head)
{N *p=head;if(!p){printf("\n该链表是空的!\n");}else{while(p){printf("%d",p->info);if(p->next){printf(" -> ");}p=p->next;}printf("\n");}
}//在单链表中查找第i个节点的值
N *find(N *head ,int i)
{int j=1;N *p=head;if(i<1){return NULL;}while(p && i!=j){p=p->next;j++;}return p;
}//在单链表中找出值为i的位置
int node_position(N* head,int i)
{N *p;int j=1;p=head;while(p && p->info!=i){p=p->next;j++;}if(!p){return 0;}else{return j;}
} //计算单链表的节点数目
int counts(N *head)
{N *p;int count=0;p=head;while(p){count++;p=p->next;}return count;
}//在单链表第i个结点后插入一个值为x的新新结点
N *insert(N *head,datatype x,int i)
{N *p,*q;q=find(head,i);/*找到第i个结点*/if(!q && i!=0){printf("找不到第%d个节点,不能插入%d",i,x);}else{p=(N*)malloc(sizeof(N));p->info=x;if(i==0){p->next=head;head=p;}else{p->next=q->next;q->next=p;}}return head;
}//从单链表中删除一个值为x的节点
N *dele_num(N *head,datatype x)
{N *pre,*p;if(!head){printf("该单链表是空的!");return head;}p=head;while(p && p->info!=x)/*没有找到并且没有找完*/{pre=p;p=p->next;/*pre指向p的前驱结点*/}if(p){if(!pre)/*要删除第一个结点*/{head=head->next;}else{pre->next=p->next;free(p);}}return head;
}//删除第i个结点
N *dele_node(N *head,int i)
{N *q,*p;if(!head){printf("该单链表是空的!");return head;}if(i==1){head=head->next;}else{q=find(head,i-1);p=find(head,i);q->next=p->next;		}return head;	 
}//将单链表进行逆转
N *inverse(N* head)
{N *p=head->next,*q,*h=head;h->next=NULL;while(p){q=p;p=p->next;q->next=h;h=q;}return h;
} //菜单 
void menu()
{printf("相关操作:【1、创建空链表 2、链表初始化(已知长度) 3、计算结点数 4、第i个结点的结点值 5、值为x的结点的位置 6、插入操作 7、删除值为x的结点 8、删除某个结点】");
}//判断是否有序
int  judge (N *head) 
{ N *p= head->next; int tem; int i = 0, j = 0, k = 0, l = 0; while (p->next != NULL){ tem = p->info; p = p->next; if (tem > p->info) i ++; else if (tem == p->info) k ++; else l ++; j ++; } if (i+k == j || l+k == j ) return 1; else return 0; 
}   
#endif // HEAD_LINK_H_INCLUDED

下面是上面六题的程序

#include "stdio.h"
#include "head_link.h"
#define MAXSIZE 100
int main()
{int x,y,position,a[MAXSIZE],temp;N *h,*p,*q,*h1,*p1,*q1;h=init();printf("查找结点数:\n"); h=creat(h);display(h);printf("一共有%d个结点\n\n",counts(h));
/*****************************/
/*在值为y的结点前插入一个值为x的结点*/ printf("在值为y的结点前插入一个值为x的结点:");printf("插入:"); scanf("%d",&x);printf("查找:");scanf("%d",&y);position=node_position(h,y);h=insert(h,x,position-1);display(h);
/*****************************/
/*奇数偶数分离*/ p=h;h1=init();//p1是奇数节点while(p){if((p->info)%2!=0){p1=(N*)malloc(sizeof(N));p1->info=p->info;p1->next=NULL;if(!h1){q1=p1;h1=p1;//删除原始数列的第一个结点 h=dele_node(h,node_position(h,p->info));}else{q1->next=p1;q1=p1;	h=dele_node(h,node_position(h,p->info));	}}p=p->next;}printf("偶数列:\n"); display(h);printf("奇数列:\n"); display(h1);
/*****************************/
/*逆置*/h=init();h=creat(h);h=inverse(h);printf("逆置以后:\n"); display(h);
/*****************************/
/*对特定的数进行删除*/	h=init();h=creat(h);display(h);printf("输入边界:\n");scanf_s("%d%d",&x,&y);p=h;while(p){if(p->info>x && p->info<=y){h=dele_node(h,node_position(h,p->info));}p=p->next;}display(h);
/*****************************/
/*判断是否有序*/printf("判断有序\n"); h=init();h=creat(h);if(judge (h) ){printf("有序\n"); }else{printf("无序\n"); }return 0;
}

相关文章:

物联网设备僵尸网络趋势分析

物联网&#xff08;IoT&#xff09;僵尸网络作者正在适应更安全的物联网设备的转变&#xff0c;这已经将***者的注意力转移到利用物联网设备的漏洞上。由于物联网设备安全性仍处于起步阶段&#xff0c;因此发现命令注入等基本漏洞并不少见。2018年11月&#xff0c;NetScout的As…

Redis6安装配置集群cluster以及集群宕机注意事项

Redis6的cluster模型推荐3主3从 先准备3台服务器&#xff0c;每个上面部署2个redis&#xff0c;服务器配置2核2G&#xff1a; 下面在每台服务器安装redis6&#xff0c;每台机器只要安装一次即可&#xff0c;然后分别配置2个端口的conf文件&#xff0c;分别起来即可&#xff1a…

【数据结构】循环单链表的实现(C语言)

循环单链表应掌握以下基本操作&#xff1a; 1、建立一个空的循环单链表。 2、获得循环单链表的最后一个结点的位置。 3、输出循环单链表中各结点的值。 4、在循环单链表中查找值为x的结点。 5、在循环单链表中第i个结点后插入值为x的新结点。 6、在循环单链表中删除值为x…

DTRACE 专家

http://dtrace.org/blogs/bmc/ https://github.com/bcantrill http://www.tudou.com/programs/view/Q6fHZFgZww4 http://dtrace.org/blogs/ahl/2012/04/24/btrace-dtrace-for-java-ish/ JAVA https://github.com/chrisa https://github.com/ahrens

统一客服消息返回错误:{errcode:43004,errmsg:require subscribe hint: [9Vv08633952]}

2019独角兽企业重金招聘Python工程师标准>>> 公众号或者小程序发送客服消息错误&#xff1a; {"errcode":43004,"errmsg":"require subscribe hint: [9Vv08633952]"} 场景&#xff1a;小程序使用公众号的服务消息&#xff0c;推送消息…

sublime Text 开发工具

简介描述 Sublime Text 是一个跨平台的编辑器&#xff0c;同时支持Windows、Linux、Mac OS X等操作系统。,具有漂亮的用户界面和强大的功能&#xff0c;例如代码缩略图&#xff0c;Python的插件&#xff0c;代码段等。还可自定义键绑定&#xff0c;菜单和工具栏。Sublime Text …

【数据结构】双链表的实现(C语言)

双链表中的结点包括3个域&#xff0c;一个是存放数据信息的info域&#xff0c;另两个是指阵域&#xff0c;这里用llink和rlink表示&#xff0c;llink指向它的前驱结点&#xff0c;rlink指向它的后继结点。 双链表要掌握以下基本操作&#xff1a; 1、创建一个空的双链表。 2、…

ShardingSphere-Proxy分库分表以及多租户安装使用

需求&#xff1a;你提供SAAS服务&#xff0c;你有你有2个租户(商户)&#xff0c;各自的数据进各自的库&#xff0c;而你不希望你的微服务java里默认配置多个租户数据源&#xff0c;数据连接池太多&#xff0c;而且后面动态增加也不方便&#xff0c;诸如此类很多问题。 方案&am…

jenkins自动化部署工具

jenkins自动化测试 & 持续集成 知识点&#xff1a; 1。下载地址&#xff1a;jenkins.io download: 转载于:https://www.cnblogs.com/kaixinyufeng/p/10123419.html

android 图片水印处理 文字倾斜处理

方法一&#xff1a; 获取一个textview 从textview中获取bitmap&#xff0c;将bitmap 通过matrix进行角度变换&#xff0c;然后将原图和此bitmap合并&#xff1b; 方法二&#xff1a; 将原图获取bitmap后&#xff0c;得到canvas&#xff0c;将canvas进行角度变换&#xff0c;…

Centos下MySQL安装与配置

一、mysql简介说到数据库&#xff0c;我们大多想到的是关系型数据库&#xff0c;比如mysql、oracle、sqlserver等等&#xff0c;这些数据库软件在windows上安装都非常的方便&#xff0c;在Linux上如果要安装数据库&#xff0c;咱不得不首先推荐的是mysql数据库了&#xff0c;而…

【数据结构】链式栈的实现(C语言)

栈的链式存储称为链式栈&#xff0c;链式栈是一种特殊的单链表&#xff0c;它的插入和删除规定在单链表的同一端进行。链式栈的栈顶指针一般用top表示。&#xff08;个人理解&#xff1a;相当于只对单链表的第一个结点进行操作&#xff09; 链式栈要掌握以下基本操作&#xff1…

opencv python 匹配

opencv python 匹配

DI 依赖注入实现原理

深度理解依赖注入&#xff08;Dependence Injection&#xff09; 前面的话&#xff1a;提到依赖注入&#xff0c;大家都会想到老马那篇经典的文章。其实&#xff0c;本文就是相当于对那篇文章的解读。所以&#xff0c;如果您对原文已经有了非常深刻的理解&#xff0c;完全不需要…

【数据结构】链式队列的实现(C语言)

队列的链式存储称为链式队列。链式队列就是一个特殊的单链表&#xff0c;对于这种特殊的单链表&#xff0c;它的插入和删除操作规定在单链表的不同端进行。链式队列的队首和队尾指针分别用front和rear表示。 链式队列要掌握以下基本操作&#xff1a; 1、建立一个空的链式队列…

离线安装k8s 1.9.0

说明本文参考 https://segmentfault.com/a/1190000012755243。在前 文基础上整理、增加说明&#xff0c;避坑。 踩过的坑&#xff1a; 安装k8s 1.9.0 实践&#xff1a;问题集锦 环境说明 环境信息&#xff08;采用一个master节点两个node节点) 192.168.1.137 tensorflow0 node …

eclipse 和 google拼音输入法冲突问题

eclipse每次当我按ctrl鼠标点击 代码 &#xff0c;本来应该是跳转到相应地方&#xff0c;可是现在每次一点eclipse就关掉。苦经搜索才知道&#xff0c;原来是使用eclipse时同时使用了谷歌拼音的问题&#xff0c;只要不要在点的时候使用谷歌输入法就好了。唉&#xff0c;谷歌拼音…

【腾讯bugly干货分享】微信Android热补丁实践演进之路

为什么80%的码农都做不了架构师&#xff1f;>>> 本文来自于腾讯bugly开发者社区&#xff0c;非经作者同意&#xff0c;请勿转载&#xff0c;原文地址&#xff1a;http://bugly.qq.com/bbs/forum.php?modviewthread&tid1264&extrapage%3D1 继插件化后&…

【ACM】杭电OJ 1001

是一道简单的题目&#xff0c;我只想要说&#xff1a;注意输出格式&#xff01; #include "stdio.h" int main () {int n,sum;while(scanf("%d",&n)1){sum0;for(int i1;i<n;i){sumi;} printf("%d\n\n",sum);}return 0; }

大数据处理也要安全--关于MaxCompute的安全科普

[TOC] 1.企业大数据处理现状 当今社会数据收集手段不断丰富&#xff0c;行业数据大量积累&#xff0c;数据规模已增长到了传统软件行业无法承载的海量数据&#xff08;百GB、TB乃至PB&#xff09;级别。基于此&#xff0c;阿里云推出有了一套快速、完全托管的GB/TB/PB级数据仓库…

自创设计模式-----答题卡模式

该模式是解决触发条件和触发结果的解耦&#xff0c;同时兼顾触发条件资源的可释放性。目的是为了获得触发结果。 /*** */package com.baidu.coolapp.answer;import java.util.Hashtable;import com.baidu.coolapp.composite.IComposite;/*** author liweigao**/public interfac…

The system cannot find the file specified

在家工作&#xff0c;程序在家里的电脑运行时&#xff0c;出现一个异常&#xff0c;还是第一见到&#xff1a; Server Error in / Application. The system cannot find the file specified Description: An unhandled exception occurred during the execution of the current…

【ACM】杭电OJ 1002

题目链接&#xff1a;杭电OJ 1002 表面上看是ab&#xff0c;很简单&#xff0c;其实是大数的相加&#xff0c;所以要考虑的因素有很多&#xff1b;&#xff08;瞬间觉得要是能用Python多好&#xff0c;哈哈哈&#xff09; 还有&#xff01;&#xff01;&#xff01; 要特别注…

Excel VBA 教程

https://www.w3cschool.cn/excelvba/ Excel VBA 编程教程 https://www.yiibai.com/vba VBA教程 http://www.accessoft.com/article-show.asp?id16502 关于VBA的0、""(空字符串)、Null、Empty、与 Nothing 的区别 转载于:https://www.cnblogs.com/onelikeone/p/…

NDK环境搭建

一、Eclipse关联cygwin 1. 工程->右击选择Properties->选择Builders&#xff0c;在Builders中选择New创建一个Program 2. 参数配置 二、Eclipse关联ndk-build&#xff08;自建Builder方法&#xff09; 1. Project->Properties->Builders->New&#xff0c;新建一…

【ACM】杭电OJ 2000

题目链接&#xff1a;杭电OJ 2000 注意使用getchar()&#xff0c;因为“\n”也是一个字符 #include "stdio.h" int main () {char a,b,c,t;while(scanf("%c%c%c",&a,&b,&c)!EOF){getchar();if(a > b){ta;ab;bt;}if(a > c){ta;ac;ct;}/…

bat批处理文件启动Eclipse和ivy本地仓库的配置

一、bat批处理文件启动Eclipse 所需文件&#xff1a; 1、eclipse 2、jre 3、startup-eclipse.bat 确保以上三个文件夹同级 startup-eclipse.bat: set dir%CD% cd %dir%\eclipse eclipse.exe -vm %dir%\jre\bin -vmargs -Xms512M -Xmx1024M -XX:PermSize128M -XX:MaxPermSize256…

helm安装配置

简介 helm是kubernetes的包管理工具&#xff0c;用于简化部署和管理 Kubernetes 应用。用来管理charts——预先配置好的安装包资源。 Helm和charts的主要作用&#xff1a; 应用程序封装版本管理依赖检查便于应用程序分发helm是一个C/S框架的软件&#xff0c;helm相当于一个客户…

ndk-build 参数NDK_APPLICATION_MK问题

被网络传闻和文档无限坑啊&#xff0c;竟然都说的是错的参数名&#xff1a;NDK_APP_APPLICATION_MK是错误的&#xff0c;NDK_APPLICATION_MK才是正确的 I am trying to pass a preprocessor define into my native code using the Android NDK that is dependent on build conf…

【GOF】23中设计模式深析

2019独角兽企业重金招聘Python工程师标准>>> ###对象创建 原型模式、工厂模式、抽象工厂模式、生成器、单例模式###接口适配 适配器模式、桥接、外观模式、迭代器###行为扩展 访问者模式、装饰模式、责任链模式###算法封装 模板方法模式、策略模式、命令模式、###性…