1 木人心石

尚未进行身份认证

我要认证

程序员的快乐得自己制造

等级
TA的排名 28w+

递归返回关键字为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

递归输出单向非空链表数据域值为奇数的结点(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

递归逆序输出非空单向链表(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:08:58

设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

递归求单向链表的结点个数(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

递归逆置数组(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:45:45

设整型数组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:39:10

递归正向和逆向输出数组(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:23:00

用循环队列实现约瑟夫环(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 08:59:22

设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:40:50

设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:07

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

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

2019-10-23 16:03:42

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

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

2019-10-23 15:55:03

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

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

2019-10-23 15:44:33

设数据域的值重复,删除关键字值为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:35:57

设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:21:29

设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:05:41

将一个单向无序非空的链表,用头插法按升序排列(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:04:19

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

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

2019-10-20 18:35:18

将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:07:15

查看更多

勋章 我的勋章
  • 签到新秀
    签到新秀
    累计签到获取,不积跬步,无以至千里,继续坚持!
  • 持之以恒
    持之以恒
    授予每个自然月内发布4篇或4篇以上原创或翻译IT博文的用户。不积跬步无以至千里,不积小流无以成江海,程序人生的精彩需要坚持不懈地积累!
  • 勤写标兵Lv4
    勤写标兵Lv4
    授予每个自然周发布9篇以上(包括9篇)原创IT博文的用户。本勋章将于次周周三上午根据用户上周的博文发布情况由系统自动颁发。