自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(22)
  • 收藏
  • 关注

原创 递归返回关键字为key的结点,若未找到返回null(C语言实现)

思路:把h往后调用,当h为0时,返回,返回的值给p,判断h->date==key,若等于把让p指向该位置,返回p。递归方程:h0 return NULL;h!=0 p=FindKeyNode(h->next,key);if(h->datekey)p=h;return p;运行环境:VS2017代码实现#include<stdio.h>#i...

2019-10-30 19:39:44 248

原创 递归输出单向非空链表数据域值为奇数的结点(C语言实现)

思路:大家可以查看我逆序输出链表的那段代码,加上对h->date的判断就可以了递归方程h==0 returnh!=0 OddNode(h->next)if(h->date%2)out:h->date;elsereturn这样奇数是逆序输出的,如果想正向输出奇数的话,就应该先输出,再调用。运行环境:VS2017代码实现#include<std...

2019-10-30 19:26:28 339

原创 递归逆序输出非空单向链表(C语言实现)

思路:将h调到null然后返回,返回输出h->date。递归方程:h==0 returnh!=0 Printx(h->next)out h->date;运行环境:VS2107代码实现#include<stdio.h>#include<stdlib.h>typedef struct node{ int date; struct...

2019-10-30 19:09:03 225

原创 设head指向一个非空单向链表数据域值不重复,递归返回最大值(C语言实现)

思路:把h调到尾结点,返回h->date,将返回的值赋给max,然后max和当前的h->date比较,max大将max返回,max小则max=h->date,返回max递归方程h->next==0 return h->dateh->next!=0 max=MaxValue(h->next)if(h->date>max)max...

2019-10-30 18:56:58 201

原创 递归求单向链表的结点个数(C语言实现)

思路:将h一直往下调用,直到h=0,然后+1返回。递归方程:h==0 return 0;h!=0 return CountNode(h->next)+1;运行环境:VS2017代码实现:#include<stdio.h>#include<stdlib.h>typedef struct node{ int date; stru...

2019-10-30 18:38:25 2891 1

原创 递归逆置数组(C语言实现)

思路:设i,j一个指向头一个指向尾,每次调用将i++,j–,头不动,然后交换首尾,i>j结束。递归方程:i>j returni<j t=a[i];a[i]=a[j];a[j]=t;rev(a,i+1,j-1);代码实现运行环境:VS2017#include<stdio.h>void rev(int a[], int i, int ...

2019-10-30 09:47:20 1061

原创 设整型数组a,统计奇数结点个数(递归C语言实现)

思路:将数组头一直往后调,当n为0时,返回0,并且判断该元素即a[0]是否为奇数,是加1不是返回。递归方程:n==0 return 0;n!=0 return odd(a+1,n-1)+a[0]%2;代码实现:运行环境:VS2017#include<stdio.h>int odd(int a[], int n){ if (n) return o...

2019-10-30 09:40:45 414

原创 递归正向和逆向输出数组(C语言实现)

思路:设a指向数组的头,n为数组个数正向输出:我们调用正向输出函数的时候,我们将a+1和n-1传给函数,原始数组为5个元素的数组,a指向头,第二次数组有4个元素,a指向头,以此类推当n=0时返回,显然我们只要输出a[0]。递归方程:n==0 return;n!=0 out:a[0];PrintArr(a+1,n-1)void PrinArr(int a[], int n){ ...

2019-10-30 09:31:10 2791

原创 用循环队列实现约瑟夫环(C语言实现)

思路:首先得定义一个循环队列,循环队列定义如下:设front为队首,rear为队尾,Q指向malloc分配的动态数组,n为元素个数入队:rear=(rear+1)%n;Q[rear]=入队元素;队满不可入队:(rear+1)%n=front;出队:front=(front+1)%n;出队元素:Q[front];队空不可出队:front=rear;显然循环队列浪费了一个空间,即f...

2019-10-30 09:16:29 6926 4

原创 设head指向一个单向链表,返回中间结点。(C语言实现)

思路:设置两个快慢指针p,q,p一次跳一个,q一次跳两个,当q为NULL说明链表奇数个,返回p,若q->为NULL,说明链表为偶数个,返回p的前驱,所以p就需要前驱。代码实现运行环境:VS2017#include<stdio.h>#include<stdlib.h>typedef struct node{ int date; struct node*n...

2019-10-23 19:42:54 229 2

原创 设head指向一个非空单向链表,判断该链表是否带环(C语言实现)

思路:设置快慢指针,如果链表带环的话,两个指针一定会指向同一个结点的,因为是单向链表,所以只可能是尾部带环。代码实现运行环境VS2017#include<stdio.h>#include<stdlib.h>typedef struct node{ int date; struct node*next;}ElemSN;//创建链表ElemSN*Great...

2019-10-23 19:23:49 174

原创 设单向非空链表(无序)删除重复值,每个重复值留一个(C语言实现)

思路:我们需要删除重复值,并且留一个,那么我们用指针pkey指向头结点,然后我们从它后面的结点开始和它,数据域值相同删除,当然这就需要两个指针联动跑,跑完,将pkey后移一个,然后又从它后面的一个结点开始和它比较,是,删除,不是两个指针联动跑。代码实现运行环境:VS2017#define N 10#include<stdio.h>#include<stdlib.h&g...

2019-10-23 16:14:37 307 1

原创 头插法创建单向链表(C语言实现)

思路:头插法说明我们每次插入的都是都结点不用把头结点拉出来单独考虑,我们设指针h初值为NULL,我们用malloc分配一个结点把它给指针p,给p的数据域赋数组中最后的一个值,指针域赋h,这样第一个结点就创建好了,然后我们将h移到p上,这样每次新创建的结点连接在h前面,不断头插。代码实现运行环境VS2017#define N 10#include<stdio.h>#includ...

2019-10-23 15:58:11 1348

原创 设指针p指向的结点既不是头结点,也不是尾结点,指针p也不是头结点,链表为不带表头的单向链表(C语言实现)

思路:这个问题,主要是锻炼一下我们的思维 ,我们知道单向链表是只能单向遍历,题目中只给我们一个p结点,我们是找不到他的前驱的,我们只能删掉他的后继,那么我们想,将p结点与它的后继数据域的值交换一下,删掉后继,是不是变相的删除了p所指的结点。代码实现:运行环境VS2017void DelpNode(ElemSN*p){ ElemSN*q; int t; q = p->next;...

2019-10-23 15:46:02 1191

原创 设数据域的值重复,删除关键字值为key的结点(重复的全部删完)(C语言实现)

思路:遍历整根链表,找到key,删掉key,找的时候p,q联动跑,找到后删除,分头删,中间尾删。头删h = h->next;free(p);p = h;头删注意要将p拉回h中间尾删q->next = p->next;free(p);p = q->next;一遍遍历完,删除完。代码实现运行环境:VS2017#include<stdio.h&...

2019-10-22 20:37:41 287

原创 设head指向一个非空单向链表,将链表就地逆置(C语言实现)

思路:拿出一个结点头插。代码实现运行环境:VS2017#include<stdio.h>#include<stdlib.h>typedef struct node{ int date; struct node*next;}ElemSN;//创建链表ElemSN*GreatLink(int Date[], int n){ int i; ElemSN...

2019-10-22 20:22:26 213

原创 设head指向一个非空单向链表,其数据域的值不重复,且均为正整数,奇数放在偶数之前(C语言实现)

思路:将一根链表分成两根,一根偶数链,一根奇数链,我们在原链表上找数据域是奇数的结点,找到删掉(不free),然后头插。找删插的过程while (p) { if (p->date % 2) { pk = p; if (p == h) { p=h = h->next; } else { q->next = p-&gt...

2019-10-22 20:13:29 286

原创 将一个单向无序非空的链表,用头插法按升序排列(C语言实现)

思路: 分为三步,找,删,头插找最大值,因为头插法每次都是插入一个头结点。第一步查找for (q = pm = h, p = h->next;p;q = p,p = p->next) { if (p->date > pm->date) { pm = p; qm = q; } }q,p联动跑,qm始终是pm的前驱第二...

2019-10-20 19:09:21 383

原创 设head1,head2分别指向两条非空单向升序的链表,将这两条链表合并成一条升序链表(C语言实现)

思路:设个指针p,指着head1和head2中数据域值较小的那一个,然后将head1或者head2后移,所以这一步为头删,p指向的结点数据域的值永远是最小的,将p->next=NULL;将该结点与head1或者head2断开,所以这样每次取出的结点都是最小的,并且p指向该结点,设一个h=NULL;将p所指向的结点往h上插入的时候就要判断该结点是新链表的头结点还是中间尾结点如果是头结点h ...

2019-10-20 18:44:19 246

原创 将Head指向的非空单向链表,把从begin开始的到end结束的子链逆置(C语言实现)

思路:设置*p,*q,*t,*w,*u这些指针,将w=end->next,u=begin;跑一个循环将t放在begin的前驱for (t = h;t->next != begin;t = t->next);在跑个循环`for (q = begin, p = begin->next;begin->next != w;p = q->next) { q...

2019-10-20 18:14:47 224

原创 判断两个非空单向链表是否相交,若相交返回第一个公共结点,若不相交返回NULL(c语言实现)

思路:判断两个链表有没有相交,及判断它们的next是否相等,与数据域的值无关,及判断if(p1->next = p2->next)。p1,p2为两个指针,初始,我们将p1,p2都放在h1,h2上,判断h1所指的链表的每个结点是否与该p2相交,中途若相交则返回结点,否则p1一直跑,跑到null,一圈结束,将p1拉回h1,p2往前调一个,重复上述动作,经过分析我们需要两个循环,一个遍历p2...

2019-10-19 16:05:16 195

原创 设head指向一个非空单向链表,返回倒数第k个结点的值(C语言实现)。

设head指向一个非空单向链表,返回倒数第k个结点的值(C语言实现)。思路:首先非空的单向链表我们不考虑链表为空的情况,返回倒数第K个结点,我们假设有两个指针,两个指针指的位置相差K个位置,当有一个指针跑到NULL时,另一个指针则为倒数第k个位置,及设有p,q两个指针,k=2,则q=h,p->next->next,当p不为NULL时,两指针往前跑,p为NULL停,q所指位置为倒数第k...

2019-10-19 15:18:50 193

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除