单链表 递归算法
发布网友
发布时间:2022-05-03 01:37
我来回答
共1个回答
热心网友
时间:2022-06-29 03:59
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
/*
用递归的方法创建单链表(整形数字)
并且判断单链表是否递增有序
求单链表的最大值
*/
//结点
struct Node
{
int data;
Node *pNext;
};
//递归创建单链表
int MaxNodeNumber = 10;
void CreateList(Node **pWork)
{
static int Count = 0;
(*pWork) = new Node();
(*pWork)->data = rand();//使用随机数 判断非递增
//(*pWork)->data = Count;//使用序号 判断递增
(*pWork)->pNext = NULL;
Count++;
if ( Count < MaxNodeNumber )
{
CreateList(&((*pWork)->pNext));
}
return;
}
//输出链表
void PrintList(Node *pWork)
{
printf("Head->");
while ( pWork != NULL )
{
printf("[%d]->",pWork->data);
pWork = pWork->pNext;
}
printf("NULL\n");
}
//递归删除单链表
void DestroyList(Node *pWork)
{
if ( NULL != pWork )
{
if ( pWork->pNext != NULL )
{
DestroyList(pWork->pNext);
}
delete pWork;
pWork = NULL;
}
}
//递归判断单链表是否递增有序
bool TestIsAscending(Node *pWork)
{
//中间结点
if ( pWork != NULL && pWork->pNext != NULL)
{
bool Current = pWork->data < pWork->pNext->data;
return Current && TestIsAscending(pWork->pNext);
}
else
{
return true;
}
}
//递归求最大值
int GetMaxValue(Node *pWork)
{
if ( pWork != NULL && pWork->pNext != NULL )
{
int MaxNextValue = GetMaxValue(pWork->pNext);
if ( pWork->data > MaxNextValue )
{
return pWork->data;
}
else
{
return MaxNextValue;
}
}
else if ( pWork->pNext == NULL )
{
return pWork->data;
}
}
void main(void)
{
Node *pHead = NULL;
srand(time(NULL));
CreateList(&pHead);
PrintList(pHead);
if ( TestIsAscending(pHead) )
{
printf("是递增\n");
}
else
{
printf("不是递增\n");
}
printf("最大值为 = %d\n",GetMaxValue(pHead));
DestroyList(pHead);
fflush(stdin);
getchar();
}
单链表就地逆置有几种方法
1.用递归算法,对于不带头结点的单链表(a1,a2,a3,a4,a5,a6)逆置后的结果为(a6,a5,a4,a3,a2,a1)考虑递归算法,若只有一个结点,则直接返回,若存在两个结点(a1,a2)则需要做的操作有:a2->next=a1;a1->next=NULL;return a2;a2即新的头结点,若有三个结点,则应先将子链(a2,a3)先...
非结构化数据如何可视化呈现?
通常情况下,我们会按照结构模型把系统产生的数据分为三种类型:结构化数据、半结构化数据和非结构化数据。结构化数据,即行数据,是存储在数据库里,可以用二维表结构来逻辑表达实现的数据。最常见的就是数字数据和文本数据,它们可以某种标准...
写一个递归算法来计算并返回链表的长度。
【答案】:(1)数据结构 采用不带头结点的单链表定义。(2)算法 int length(LinkList llist){ /*计算单链表llist的长度*/ if(llist==NULL)return 0;return 1+length(llist->link);} (3)代价分析 该算法访问每个结点各一次,故时间代价为O(n)。学会用递归的思想分析问题,编写递归函数在许多...
...的都是整型数据,试写出实现下列运算的递归算法:
s=i=0;while(f->next!=NULL){ i++;if(i==1)max=f->data;if(f->data>max)max=f->data;s+=f->data;f=f->next;} printf("%d%d%d",max,i,s/i);
C++:递归算法实现二进制正整数各个bit位排序存储(单链表),急求~~
void add_1(Node & L){ //引用传参 if(L.num==0){ L.num++;}else{ L.num=0;if(L.next==NULL){ Node *n=malloc(sizeof(Node));L.next=n;n->num=0;n->next=NULL;} add_1(L.next); //L.next指示下一个节点 } } 你试试看 ...
单链表 在递增有序单链表中插入元素并保持递增有序
1用递归算法对int型数组进行双向选择排序#include<stdio.h> void paixu(int x[],int m,int n){ int max,min,e,q,l=m,k=m;if(m>=n) return;max=x[m];for(e=m;e<=n;e++){ if(x[e]>max) {l=e;max=x[e];} } q=x[n];x[n]=x[l];x[l]=q;min=x[m];for(e=m...
王炸!算法可视化功能全面上线,包括递归算法可视化!
可视化面板主要分为以下几个部分,展示算法执行的全过程。例如,单链表成环算法的可视化,二叉树的「拉平」算法执行过程,以及递归算法的可视化。递归算法可视化是此次更新的一大亮点,能帮助你直观理解递归算法执行过程。递归过程通过交互式页面展现,用户可自行控制动画,查看每一步代码执行情况及算法当前状态。
数据结构与算法大学没学明白的来
单链表(带头结点、不带头结点)设计与实现(增删改查),双链表设计与实现 栈设计与实现(数组和链表),队列设计与实现(数组和链表)二又树概念学习,二又树前序、中序、后序遍历递归、非递归实现 ,层序遍历 二又排序树设计与实现(插入删除)堆(优先队列、堆排序)AVL(平衡)树设计与实现(四种自旋方式理解...
关于数据结构的问题,用C语言描述
其中,单链表的归并算法、循环链表的归并算法、双向链表及双向循环链表的插入和删除算法等都是较为常见的考查方式。此外,近年来在不少学校中还多次出现要求用递归算法实现单链表输出(可能是顺序也可能是倒序)的问题。在链表的小题型中,经常考到一些诸如:判表空的题。在不同的链表中,其判表空的方式是不一样的,请...
求数据结构试题…重点
1、单链表:单链表定义、相应操作的实现、单链表的游标类。要点:单链表的两种定义方式(复合方式与嵌套方式)。单链表的搜索算法与插入、删除算法。单链表的递归与迭代算法 2、循环链表:单链表与循环链表的异同3、双向链表:双向链表的搜索、插入与删除算法、链表带表头结点的优点4、多项式的链接表示第四章 栈与队列1...
c++ 单向链表和双向链表有什么区别?各自有什么优缺点?
1、双向链表:有两个指针,一个指向前一个节点,一个后一个节点。2、优点:可以找到前驱和后继,可进可退;3、缺点:增加删除节点复杂,多需要分配一个指针存储空间。4、适用于需要双向查找节点值的情况。单向链表(单链表)是链表的一种,其特点是链表的链接方向是单向的,对链表的访问要通过顺序...