已知顺序表la和lb中的元素依值非递减有序排列,现将la和lb归并到新的顺序表lc中,中元素也依值非递减有序排列.例如 la=(3,6,9,11) lb=(4,6,8,11,13,17,20) 则lc=(3,4,6,6,8,9,11,11,13,17,20)我不要算法,要从开
来源:学生作业帮助网 编辑:六六作业网 时间:2024/11/15 15:18:33
已知顺序表la和lb中的元素依值非递减有序排列,现将la和lb归并到新的顺序表lc中,中元素也依值非递减有序排列.例如 la=(3,6,9,11) lb=(4,6,8,11,13,17,20) 则lc=(3,4,6,6,8,9,11,11,13,17,20)我不要算法,要从开
已知顺序表la和lb中的元素依值非递减有序排列,现将la和lb归并到新的顺序表lc中,中元素也依值非递减有序
排列.例如 la=(3,6,9,11) lb=(4,6,8,11,13,17,20) 则lc=(3,4,6,6,8,9,11,11,13,17,20)我不要算法,要从开头到最后的完整的程序,包括怎么定义.建表等等.有好的会有追加
另外请大概解释一下每一步的的意思,加点注释
已知顺序表la和lb中的元素依值非递减有序排列,现将la和lb归并到新的顺序表lc中,中元素也依值非递减有序排列.例如 la=(3,6,9,11) lb=(4,6,8,11,13,17,20) 则lc=(3,4,6,6,8,9,11,11,13,17,20)我不要算法,要从开
#include
#include
/*声明库函数*/
struct Node
{
int data;
Node *next;
};/*定义结点结构*/
void Create(Node **root) /*生成单链表*/
{
Node *p,*q;
int count;
if( NULL == *root)
return;
p = *root;
printf("请输入节点的个数:");
scanf("%d",&count);
for(int i = 0; idata));
p->next = q;
p = q;
p ->next =NULL;
}
}
Node * Combine(Node *root1,Node *root2) /*合并两个单链表,并返回新单链表的表头指针*/
{
Node *root3 = (Node*)malloc(sizeof(Node));
Node *p1,*p2,*p3;
p1 = root1 ->next;
p2 = root2 ->next;
p3 = root3;
while(p1 != NULL&&p2 != NULL)
{
if(p1 ->data < p2 ->data)
{
p3 ->next = p1;
p3 = p3 ->next;
p1 = p1 ->next;
}
else
{
p3 ->next = p2;
p3 = p3 ->next;
p2 = p2 ->next;
}
}
while(p1 == NULL && p2 != NULL)
{
p3 ->next = p2;
p3 = p3 ->next;
p2 = p2 ->next;
}
while(p2 == NULL && p1 != NULL)
{
p3 ->next = p1;
p3 = p3 ->next;
p1 = p1 ->next;
}
return root3;
}
/*下面为主方法*/
int main()
{
Node *root1,*root2,*Combine_Root;
Node *p,*q;
root1 = (Node*)malloc(sizeof(Node));
root2 = (Node*)malloc(sizeof(Node));
Create(&root1); /*生成单链表1*/
Create(&root2);/*生成单链表2*/
Combine_Root = Combine(root1,root2); /*合并单链表*/
for(p = Combine_Root ->next; p != NULL; p = p ->next)
printf("%d",p ->data);
free(root1);
free(root2);
for(p = Combine_Root; p != NULL; )
{
q = p;
p = p ->next;
free(q);
}
return 0;
}