递归算法-不带头节点的单链表
2016-04-14 19:12
183 查看
问题及代码:
/*
* Copyright (c) 2016, 烟台大学计算机与控制工程学院
* All rights reserved.
* 文件名称:LinkList.cpp
* 作 者:单昕昕
* 完成日期:2016年4月14日
* 版 本 号:v1.0
* 问题描述:有一个不带头节点的单链表,设计递归算法:
(1)求以h为头指针的单链表的节点个数
(2)反向显示以h为头指针的单链表的所有节点值
* 程序输入:数组A
。
* 程序输出:n个元素的平均值。
*/
#include <iostream>
#include <cstring>
#include <cstdio>
#include <cmath>
#include <time.h>
#include <stdlib.h>
using namespace std;
//不带头节点的单链表的节点类型
typedef struct Node
{
int data;
struct Node *next;
} LinkList;
LinkList *h;
void Create(LinkList *&h,int a[],int n)
{
//建立一个不带头节点的单链表
int i;
LinkList *s,*r;
h=(LinkList *)malloc(sizeof(LinkList));
h->data=a[0];
h->next=NULL;
r=h;
for(i=1; i<n; ++i)
{
s=(LinkList *)malloc(sizeof(LinkList));
s->data=a[i];
r->next=s;
r=s;
}
r->next=NULL;
}
//求以h为头指针的单链表的节点个数
int Number(LinkList *h)
{
if(h==NULL)
return 0;
else
return 1+Number(h->next);
}
//反向显示以h为头指针的单链表的所有节点值
void Display(LinkList *h)
{
if(h==NULL)
return ;
else
{
Display(h->next);
cout<<h->data<<" ";
//如果是正向显示的话,cout写在Display递归上面
}
}
int main()
{
int a[10]= {0,1,2,3,4,5,6,7,8,9};//作为预设单链表中的data值
Create(h,a,10);//尾插法将a数组中的值插入链表
cout<<"以h为头指针的单链表的节点个数=";
cout<<Number(h)<<endl;
cout<<"反向显示以h为头指针的单链表的所有节点值"<<endl;
Display(h);
return 0;
}
运行结果:
/*
* Copyright (c) 2016, 烟台大学计算机与控制工程学院
* All rights reserved.
* 文件名称:LinkList.cpp
* 作 者:单昕昕
* 完成日期:2016年4月14日
* 版 本 号:v1.0
* 问题描述:有一个不带头节点的单链表,设计递归算法:
(1)求以h为头指针的单链表的节点个数
(2)反向显示以h为头指针的单链表的所有节点值
* 程序输入:数组A
。
* 程序输出:n个元素的平均值。
*/
#include <iostream>
#include <cstring>
#include <cstdio>
#include <cmath>
#include <time.h>
#include <stdlib.h>
using namespace std;
//不带头节点的单链表的节点类型
typedef struct Node
{
int data;
struct Node *next;
} LinkList;
LinkList *h;
void Create(LinkList *&h,int a[],int n)
{
//建立一个不带头节点的单链表
int i;
LinkList *s,*r;
h=(LinkList *)malloc(sizeof(LinkList));
h->data=a[0];
h->next=NULL;
r=h;
for(i=1; i<n; ++i)
{
s=(LinkList *)malloc(sizeof(LinkList));
s->data=a[i];
r->next=s;
r=s;
}
r->next=NULL;
}
//求以h为头指针的单链表的节点个数
int Number(LinkList *h)
{
if(h==NULL)
return 0;
else
return 1+Number(h->next);
}
//反向显示以h为头指针的单链表的所有节点值
void Display(LinkList *h)
{
if(h==NULL)
return ;
else
{
Display(h->next);
cout<<h->data<<" ";
//如果是正向显示的话,cout写在Display递归上面
}
}
int main()
{
int a[10]= {0,1,2,3,4,5,6,7,8,9};//作为预设单链表中的data值
Create(h,a,10);//尾插法将a数组中的值插入链表
cout<<"以h为头指针的单链表的节点个数=";
cout<<Number(h)<<endl;
cout<<"反向显示以h为头指针的单链表的所有节点值"<<endl;
Display(h);
return 0;
}
运行结果:
相关文章推荐
- 如何组织构建多文件 C 语言程序(二)
- 如何写好 C main 函数
- 书评:《算法之美( Algorithms to Live By )》
- 动易2006序列号破解算法公布
- C#数据结构之顺序表(SeqList)实例详解
- Ruby实现的矩阵连乘算法
- C#插入法排序算法实例分析
- Lua和C语言的交互详解
- Lua教程(七):数据结构详解
- 解析从源码分析常见的基于Array的数据结构动态扩容机制的详解
- 超大数据量存储常用数据库分表分库算法总结
- C#数据结构与算法揭秘二
- C#冒泡法排序算法实例分析
- C#数据结构之队列(Quene)实例详解
- C#数据结构揭秘一
- C#定义并实现单链表实例解析
- C#数据结构之单链表(LinkList)实例详解
- 算法练习之从String.indexOf的模拟实现开始
- C#算法之关于大牛生小牛的问题