题目:输入两个有序数列,设计算法将二者合并成一个有序序列;
思路:以升序数列为例。由于输入数列中元素个数不确定,将采用链表存储数据;声明链表结构体;采用尾插法创建链表;通过指针逐一比较两链表元素大小,将较小元素插入到新链表表尾,该操作直至有一方指针为空;将另一链表剩余元素全部连接到新链表表尾;输出新链表;释放新链表和两个原链表头指针。
存在问题:之所以采用链表方法,是因为对没有明确输入规模的程序题感到棘手,还没学到比较简单的处理方法;也不擅长终止循环scanf的输入;尤其是两者结合的问题,感到头大!恳切希望有大佬指点一番。
代码:
#include<stdio.h>
#include <stdlib.h>
typedef struct node{
int data;
struct node *next;
}node;
//尾插法创建链表
void creatlinklist(node *l){
node *p,*r;
int i=1,j;
r=l;
printf("请输入有序数列(升序):");
while(i!=0){
scanf("%d",&j);
if(j!=-1){
p=(node *)malloc(sizeof(node));
p->data=j;
r->next=p;
r=p;
}
else {
i=0;
r->next=NULL;
}
}
}
//主函数
int main(){
node *l1,*l2,*l
本文介绍如何使用C语言,通过链表数据结构合并两个已排序的数列。采用尾插法创建新链表,并逐一比较两链表元素大小,将较小元素插入新链表。遇到输入规模不明确及scanf终止循环等问题,寻求解决方案。
订阅专栏 解锁全文
963

被折叠的 条评论
为什么被折叠?



