已知头指针分别为la和lb的有序单链表,其数据元素都是按值非递减排列。现要归并la和lb得到单链表lc,使得lc中的元素按值非递减排列。
2018-04-07 14:56
2301 查看
已知头指针分别为la和lb的有序单链表,其数据元素都是按值非递减排列。现要归并la和lb得到单链表lc,使得lc中的元素按值非递减排列。
主程序:#include<stdio.h>
#include<stdlib.h>
typedef int ElemType;
typedef struct SingleNode{
ElemType data;
struct SingleNode *next;
}SList;
#include"SList.h"
int main()
{
freopen("in.txt","r",stdin);
SList *la,*lb,*lc;
int a,b,i;
ElemType k;
ListInitialize(&la);
ListInitialize(&lb);
ListInitialize(&lc);
printf("输入链表la的元素个数: ");
scanf("%d",&a);
printf("输入链表la的元素: ");
for(i=1;i<=a;i++)
{
scanf("%d",&k);
ListInsert(la,k);
}
printf("输入链表lb的元素个数: ");
scanf("%d",&a);
printf("输入链表lb的元素: ");
for(i=1;i<=a;i++)
{
scanf("%d",&k);
ListInsert(lb,k);
}
/*开始干活*/
change(la,lb,lc);
/*检验*/
SList *p;
p=lc->next;
printf("\n\n\n");
while(p!=NULL)
{
printf("%d ",p->data);
p=p->next;
}
return 0;
}头文件SList.h
运行结果:
主程序:#include<stdio.h>
#include<stdlib.h>
typedef int ElemType;
typedef struct SingleNode{
ElemType data;
struct SingleNode *next;
}SList;
#include"SList.h"
int main()
{
freopen("in.txt","r",stdin);
SList *la,*lb,*lc;
int a,b,i;
ElemType k;
ListInitialize(&la);
ListInitialize(&lb);
ListInitialize(&lc);
printf("输入链表la的元素个数: ");
scanf("%d",&a);
printf("输入链表la的元素: ");
for(i=1;i<=a;i++)
{
scanf("%d",&k);
ListInsert(la,k);
}
printf("输入链表lb的元素个数: ");
scanf("%d",&a);
printf("输入链表lb的元素: ");
for(i=1;i<=a;i++)
{
scanf("%d",&k);
ListInsert(lb,k);
}
/*开始干活*/
change(la,lb,lc);
/*检验*/
SList *p;
p=lc->next;
printf("\n\n\n");
while(p!=NULL)
{
printf("%d ",p->data);
p=p->next;
}
return 0;
}头文件SList.h
void ListInitialize(SList **head) { *head=(SList *)malloc(sizeof(SList)); if(!*head) exit(1); (*head)->next=NULL; } int ListInsert(SList *head,ElemType k) { SList *p,*q; p=head; while(p->next!=NULL && k>p->next->data) p=p->next; q=(SList *)m 4000 alloc(sizeof(SList)); if(!q) exit(1); q->data=k; q->next=p->next; p->next=q; return 1; } void change(SList *la,SList *lb,SList *lc) { SList *p,*q,*k; p=la->next,q=lb->next,k=lc; while(p!=NULL && q!=NULL) { if(p->data>q->data) { ListInsert(lc,q->data); q=q->next; } else if(p->data<q->data){ ListInsert(lc,p->data); p=p->next; } else { ListInsert(lc,q->data); q=q->next; ListInsert(lc,p->data); p=p->next; } } while(p!=NULL) { ListInsert(lc,p->data); p=p->next; } while(q!=NULL) { ListInsert(lc,q->data); q=q->next; } }测试用例:
运行结果:
相关文章推荐
- 线性表LA和LB非递减有序排列,将LA,LB进行归并为新的线性表LC,要求LC中的数据元素扔非递减有序列排列
- 已知两个链表 la和 lb,其元素值递增排序。编程将la和lb合并成一个递减有序(相同值元素只保留一个)的链表lc。(北方名校经典试题) 本题选做
- 把元素递增的线性表La和Lb合并为Lc,且Lc的中的元素递减排列,使用原空间
- 假设利用两个线性表La和Lb分别表示两个集合A和B(即线性表中的数据元素即为集合中的成员),现要求一个新的 集合A=AUB。这就要求对线性表作如下操作:扩大线性表La,将存在于线性表Lb中而不存在于线
- 线性链表之将单调递增的la和lb中的数据元素按值递增,将la和lb合并为新的线性表lc,使lc中的元素仍然单调递增
- 假设有两个按元素值递增有序排列的线性表A和B,均以单链表作存储结构,请编写算法将A表和B表归并为一个按元素值递减 有序(即非递增有序,允许表中含有值相同的元素)排列的线性表C,并要求利用原装(即A表和
- 单链表应用举例(单链表A和单链表B的元素都是非递减排列,利用单链表的基本运算,将它们合并成一个单链表C,要求C也是非递减序列)
- 将非递减有序排列(L L1)归并为一个新的线性表L2 线性表L2中的元素仍按值非递减
- 在非递减的有序单链表中插入一个值为x的数据元素,并使单链表仍保持有序的操作
- 假设有两个按元素值递增有序排列的线性表A和B,均以单链表作存储结构,请编写算法将A表和B表归并为一个按元素值递减 有序(即非递增有序,允许表中含有值相同的元素)排列的线性表C,并要求利用原装(即A表和
- 设A和B是两个单链表,其表中元素递增有序,使用一算法将A和B归并成一个案元素递减有序的单链表C(该程序中的功能包含了上几个博客中的部分功能)
- 假设有两个按元素值递增有序排列的线性表A和B,均以单链表作存储结构,请编写算法将A表和B表归并为一个按元素值递减 有序(即非递增有序,允许表中含有值相同的元素)排列的线性表C,并要求利用原装(即A表和
- 写程序。设ha和hb分别是两个带头结点的非递减有序单链表的头指针,试设计算法,将这两个有序链表合并成一个非递增有序的单链表。要求使用原链表空间,
- 数据元素非递减排列归并
- 设ha和hb分别是两个带头节点的费递减有序单链表的表头指针,设计以算法,将将两个有序链表合成一个非递减的有序单链表,该程序以以前发表的博客中的链表中的区别在与该立案表带有头结点
- 已知顺序表L1,L2中数据由小到大有序,请用尽可能快的方法将L1与L2中的数据合并到L3中,使数据在L3中按升序排列
- java编程实现将两个有序单链表LA,LB合并成新的LA
- 合并两个单链表(单链表元素均按值非递减排列)
- 重学数据结构 将Lb中纯在但不在La中的数据元素插入到La中
- 假设以两个元素依值递增有序排列的线性表A和B分别表示两个集合,现要求另辟空间构成一个顺序链表C