递归运用于链表的操作
2014-10-12 12:58
169 查看
在上学期学c的时候就已经接触过递归的思想,但是对递归仍旧不了解,不知道递归究竟有什么方便之处,后来经过查资料,看书,感觉递归既有利也有弊,有时候它会浪费一定的空间时间,但是他最大的优点就是他能够令代码简洁不少,用别人的一句话递归就是我完成最简单的那一步,其他难的相似问题就找别人做吧。不得不说,递归确实是思考问题的一种方式。
问题描述:链表的基本操作是一个基本需要掌握的知识,但是他的各种操作代码繁琐,我们就可以利用递归实现,代码就简洁了很多。
代码实现(主要的算法思想)
//递归实现链表的基本操作
#include<stdio.h>
#include<stdlib.h>
typedef struct node
{
int a;
struct node *next;
}lnode;
void creat(lnode *head) //链表的创建
{
lnode *l=(lnode *)malloc(sizeof(lnode));
scanf("%d",l->a);
if(n->a)
{
head->next=l;
head=l;
creat(head);
}
else
{
head->next=NULL;
free(l);
}
}
int count_lnode(lnode *head) //统计节点的个数
{
int count=0;
if(head!=HULL)
{
count+=1;
if(head->next!=NULL)
{
count_lnode(head->next);
}
return count;
}
}
void print_lnode(lnode *head) //打印链表
{
if(NULL!=head)
{
printf("%d",head->a);
if(head->next!=NULL)
{
print_lnode(head->next);
}
}
}
void de_lnode(lnode *head, int x) //删除节点
{
lnode *p;
if(head->next)
{
if(head->next->a=x)
{
p=head->next;
head->next=p->next;
free(p);
de_lnode(head,x);
}
else
{
de_lnode(head->next,x);
}
}
}
问题描述:链表的基本操作是一个基本需要掌握的知识,但是他的各种操作代码繁琐,我们就可以利用递归实现,代码就简洁了很多。
代码实现(主要的算法思想)
//递归实现链表的基本操作
#include<stdio.h>
#include<stdlib.h>
typedef struct node
{
int a;
struct node *next;
}lnode;
void creat(lnode *head) //链表的创建
{
lnode *l=(lnode *)malloc(sizeof(lnode));
scanf("%d",l->a);
if(n->a)
{
head->next=l;
head=l;
creat(head);
}
else
{
head->next=NULL;
free(l);
}
}
int count_lnode(lnode *head) //统计节点的个数
{
int count=0;
if(head!=HULL)
{
count+=1;
if(head->next!=NULL)
{
count_lnode(head->next);
}
return count;
}
}
void print_lnode(lnode *head) //打印链表
{
if(NULL!=head)
{
printf("%d",head->a);
if(head->next!=NULL)
{
print_lnode(head->next);
}
}
}
void de_lnode(lnode *head, int x) //删除节点
{
lnode *p;
if(head->next)
{
if(head->next->a=x)
{
p=head->next;
head->next=p->next;
free(p);
de_lnode(head,x);
}
else
{
de_lnode(head->next,x);
}
}
}
相关文章推荐
- MFC 运用CFileFind 类 递归实现文件夹的 复制 (MFC 文件操作 二)
- 算法之递归(3)- 链表操作
- 链表递归操作并求最大值
- MFC 运用CFileFind 类 递归实现文件夹的 复制 (MFC 文件操作 二)
- java实现单向链表CRUD,反转,排序,查找倒数第k个元素,递归输出等操作
- 合并两个有序的链表使新链表依然有序(不开辟新空间,在原链表上操作。 递归版本)
- 链表操作(将两个链表合并成一个链表依然有序,非递归方法和迭代方法)
- 给定的单链表逆序操作的递归与非递归算法总结
- c之二叉树链表操作---建立、(递归)前序遍历、中序遍历、后序遍历
- 实验2.3 运用双链表实现对数据的基本操作
- 关于链表的递归操作
- 二叉查找树的各项操作(重点是结点的删除部分和递归的运用)
- 用递归实现对链表的基本操作
- 数据结构学习之单向链表的基本操作(非递归实现)
- 单链表操作的递归总结
- 由一道题看链表指针的反转、栈操作(递归)
- 递归操作链表
- 数据结构学习之双向循环链表的基本操作(非递归实现)
- MFC 运用CFileFind 类 递归实现文件夹的 复制 (MFC 文件操作 二)
- 单向链表操作中的二级指针的运用