编写算法判断单链表遍历算法是否是一个升序链表

设计算法将一个为升序,一个为降序的单链表-中国学网-中国IT综合门户网站
> 信息中心 >
设计算法将一个为升序,一个为降序的单链表
来源:互联网 发表时间: 22:37:41 责任编辑:李志喜字体:
为了帮助网友解决“设计算法将一个为升序,一个为降序的单链表”相关的问题,中国学网通过互联网对“设计算法将一个为升序,一个为降序的单链表”相关的解决方案进行了整理,用户详细问题包括:我的想法是将一个降序的单链表先置逆,然后再将这两个递增的链表合并为一个递增的有序链表。请问算法要怎么写啊?谢谢啦,具体解决方案如下:解决方案1:
新建一个链表,把降序链表从链表尾开始插入新链表,然后把两个链表的首尾相联就可以了。
1个回答2个回答1个回答1个回答1个回答1个回答1个回答2个回答1个回答1个回答1个回答1个回答1个回答1个回答1个回答1个回答1个回答1个回答1个回答
相关文章:
最新添加资讯
24小时热门资讯
Copyright © 2004- All Rights Reserved. 中国学网 版权所有
京ICP备号-1 京公网安备02号设计链表合并算法,将两个已排序(升序)的单链表,合并成一个链表而不改变其有序性。用c语言编写。
设计链表合并算法,将两个已排序(升序)的单链表,合并成一个链表而不改变其有序性。用c语言编写。 5
不区分大小写匿名
&#include &stdio.h&#include &malloc.h&typedef struct node{&&struct node *}LList *create(List *head,int n)//创建链表 {&List *p,*q;&q=(List *)malloc(sizeof(List));&q-&data=n;&q-&next=NULL;&p=&while(p-&next!=NULL)p=p-&&p-&next=q;&}void print(List *head)//输出链表 {&List *p;&p=head-&&while(p!=NULL)&{&&printf("%d ",p-&data);&&p=p-&&}}
List *LINK(List *head1,List *head2)//连接链表 {&List *p;&p=head1;&while(p-&next!=NULL)p=p-& &p-&next=head2-&&return head1;}
main(){&&List *head1,*head2,*link1;&head1=(List *)malloc(sizeof(List));&head1-&next=NULL;&head2=(List *)malloc(sizeof(List));&head2-&next=NULL;&for(i=1;i&=5;i++)head1=create(head1,i);//输入链表1 &printf("链表1:\n");&print(head1);&printf("\n链表2:\n");&for(i=6;i&=10;i++)head2=create(head2,i);//输入链表2&print(head2);&link1=LINK(head1,head2);&printf("\n连接后的链表:\n");&print(link1);}
#include &stdio.h&#include &malloc.h&typedef struct node{&&struct node *}LList *create(List *head,int n)//创建链表 {&List *p,*q;&q=(List *)malloc(sizeof(List));&q-&data=n;&q-&next=NULL;&p=&while(p-&next!=NULL)p=p-&&p-&next=q;&}void print(List *head)//输出链表 {&List *p;&p=head-&&while(p!=NULL)&{&&printf("%d ",p-&data);&&p=p-&&}}
List *LINK(List *head1,List *head2)//连接链表 {&List *p,*q,*k;&p=head1;&while(p-&next!=NULL)p=p-& &p-&next=head2-&//head2连接到head1 &&k=head1;//重新排序 &p=head1-&&q=p-&&while(q!=NULL)&{&&if(q-&data&p-&data)&&{&&&p-&next=q-&&&&k-&next=q;&&&q-&next=p;&&&k=head1;&&&p=head1-&&&&q=p-&&&}&&else&&{&&&k=k-&&&&p=p-&&&&q=q-&&&}&}&return head1;&}
main(){&&List *head1,*head2,*link1;&head1=(List *)malloc(sizeof(List));&head1-&next=NULL;&head2=(List *)malloc(sizeof(List));&head2-&next=NULL;&for(i=1;i&=10;i+=2)head1=create(head1,i);//输入链表1 &printf("链表1:\n");&print(head1);&printf("\n链表2:\n");&for(i=2;i&=10;i+=2)head2=create(head2,i);//输入链表2&print(head2);&link1=LINK(head1,head2);&printf("\n连接后的链表:\n");&print(link1);}
相关知识等待您来回答
编程领域专家
& &SOGOU - 京ICP证050897号您所在位置: &
&nbsp&&nbsp&nbsp&&nbsp
数据结构 张铭 习题.doc51页
本文档一共被下载:
次 ,您可全文免费在线阅读后下载本文档。
文档加载中...广告还剩秒
需要金币:100 &&
你可能关注的文档:
··········
··········
第一章概论 练习答案
上一章 ??下一章 本章练习题
答案分页:??[1] [2] 1、解答:
【题意解析】 ASCII字符顺序来排序。
【典型错误】 1.不按照题目给出的字符顺序进行排序,而按照ASCII字符顺序。 2. 3.认为顺序存储法比较节约空间,事实上由于字符空隙,顺序法并不节约空间; 4. 没有比较各种方法的优劣。
【数据结构】 1. 用二维数组array[NUMOFSTRING][MAX_LENGTH],此题可定义const int NUMOFSTRING 8, MAX_LENGTH 5;
优点:为紧凑存储结构,没有用于存储其他附加的信息,表示方法比较直观简单,代码实现十分容易。 缺点:为每个但此都开辟了同样长度的空间,造成空间的浪费。 2. 用链表的结构存储,结点为结构 struct strings char string[MAX_LENGTH]; strings *pN 优点:如果有后续工作如反复增删结点,效率很高.并且可以使用不连续的空间。 缺点:操作过程相对复杂,容易出错.而且排序过程需要从表头开始沿链索一个结点一个结点的比较搜索,相当费时。?
3. 索引存储 是顺序存储的一种推广.使用一个字符串char data[500],其中将大小长度不等的数据结点 单词 顺序存储其中.令使用一个字符指针数组 char* index[n],存储一系列指针,每个指针指向存储区域的一个数据结点. 排序时,直接对index中的地址值进行调换修改即可,而不用修改data中的任何内容。索引存储的优点是:由于单词长度不同,在存储时充分考虑了这个因素,可以节省空间,此外由于交换的不是单词本身而是单词的地址,可以节省时间,从时空两方面得到了优化。 【排序结果】 B899B9,CRSI,CXY,PAB,PABC,5C,7 2、解答: 【题意解析】 100个实数是否存在相等的情况,在这里,我们考虑存在多个最大值的情
正在加载中,请稍后....h&#define COUNT 5
//初始5个结点的链表struct node{
node *}; node *creat();
//创建新链表(5个结点)void print(node *);
//遍历链表node *add(node *); //添加\插入一个结点int isSort(node *);
//判断其数据项是否按从小到大排列node *reverse(node *); //反转链表void main(){
head = creat();
print(head);
head = add(head);
print(head);
head = reverse(head);
print(head);
if(0==isSort(head))printf(&不是按从小到大排序\n&);
else printf(&是按从小到大排序\n&);}n
#include&stdlib.h&#include &std.h&#define COUNT 5
//初始5个结点的链表struct node{
node *}; node *creat();
//创建新链表(5个结点)void print(node *);
//遍历链表node *add(node *); //添加\插入一个结点int isSort(node *);
//判断其数据项是否按从小到大排列node *reverse(node *); //反转链表void main(){
head = creat();
print(head);
head = add(head);
print(head);
head = reverse(head);
print(head);
if(0==isSort(head))printf(&不是按从小到大排序\n&);
else printf(&是按从小到大排序\n&);}node *creat(){
node *p1,*p2,*
head=NULL;
p1=p2 = (node *)malloc(sizeof(node));
p1-&num = 1;
for(int i =1;i&=COUNT;i++)
p1 = (node *)malloc(sizeof(node));
p1-&num = (100*rand())/(RAND_MAX*1.0);//0~100间的随机数
p2-&next = p1;
p2-&next = NULL;}void print(node *head){
if(head == NULL){printf(&It's a empty list\n&);}
node *first =
while(first != NULL)
printf(&%d &,first-&num);
first = first-&
printf(&\n&);}int isSort(node *head){
if(head == NULL) {printf(&It's a empty list\n&);return 0;}
while(p-&next != NULL)
if(p-&num & p-&next-&num)return 0; //发现有后一个比前一个值小则结束查找
return 1;}node *reverse(node *head){
node *pre,*cur,*
if(head==NULL){printf(&It's a empty list\n&);}
cur = head-&
while(cur)
nex = cur -&
//保存下一个结点
cur-&next =
//当前结点的下一个结点指向前一个结点,实现反转
//pre和cur都依次后移一个结点
head-&next = NULL;
//处理旧链表的头结点(即新链表的尾结点)
您的举报已经提交成功,我们将尽快处理,谢谢!
貌似太专业了。。。建议自己看下书吧
(window.slotbydup=window.slotbydup || []).push({
id: '2081942',
container: s,
size: '1000,60',
display: 'inlay-fix'

我要回帖

更多关于 单链表倒置算法 的文章

 

随机推荐