刚开始学数据结构,这道是作业题,写完交作业之余发了出来,需要的朋友可以看看。
题目:
已知:线性表 A、B,分别由单链表 La , Lb 存储,其中数据元素按值非递减有序排列。
具体如下:现需要将 A ,B 归并为一个新的线性表C , C 的数据元素仍按值非递减排列,设线性表 C 由单链表 Lc 存储。
#include <string>
#include <stdlib.h>
typedef int ElemType;
typedef struct list{
ElemType data;
struct list *next;
} list,*pointer;
//尾插法新建链表;
void ElmInsert(pointer &l){
l=(pointer) malloc(sizeof (list));
pointer node,TranPointer=l;
ElemType x;
scanf("%d",&x);
l->next=NULL;
while (x!=10){
node=(pointer) malloc(sizeof (list));
node->data=x;
TranPointer->next=node;
TranPointer=node;
scanf("%d",&x);
}
node->next=NULL;
}
//读取链表
void PrintList(pointer l){
l=l->next;
while (l!=NULL){
printf("%3d",l->data);
l=l->next;
}
}
//对链表进行合并
void MergeList(pointer L1,pointer L2){
pointer SignNode;
while (L1->next!=NULL){
SignNode=L1->next;
L1=L1->next;
}
SignNode->next=L2->next;
}
//对链表进行排序
void SortList(pointer L1){
if (L1->next==NULL){
return;
}
pointer L2;
pointer p;
p=L1->next;
int index=0;
while (p!=NULL){
index++;
p=p->next;
}
int i=0,j,t;
while (i<index){
L1=L1->next;
L2=L1->next;
i++;
j=i;
while (j<index){
if (L1->data>=L2->data) {
t = L1->data;
L1->data = L2->data;
L2->data = t;
}
L2=L2->next;
j++;
}
}
}
int main() {
pointer Lb,La;
ElmInsert(La);
ElmInsert(Lb);
MergeList(La,Lb);
SortList(La);
PrintList(La);
return 0;
}
排序部分,通过双循环在链表内部进行位置交换实现的,可能有点复杂,可以带几个值进去试试。