您的位置:首页 > 理论基础 > 数据结构算法

数据结构考研复习--线性表2

2015-10-17 13:43 477 查看
2 厦门大学 2000 15分

有序线性表的合并:这个比较基础,例如给出两个链表,

h1 :1 3 5 7 9

h2 : 0 2 4

合并的结果就是 0 1 2 3 4 5 7 9

这个比较简单,直接上代码

先搭建测试环境

typedef struct  _LinkList
{
int data;
struct _LinkList *next;
}LinkList;

/*构建两个有序链表*/

void creat1(LinkList *head)  //1 3 5 7 9
{
int i = 0;
LinkList *pcur = head;
for (i = 0; i<5;i++)
{
LinkList *pm = (LinkList*)malloc(sizeof(LinkList));
pm->data = 2*i+1;
pm->next = NULL;
pcur->next = pm;
pcur = pm;
}

}

void creat2(LinkList *head) // 0 2 4
{
int i = 0;
LinkList *pcur = head;
for (i = 0; i<3;i++)
{
LinkList *pm = (LinkList*)malloc(sizeof(LinkList));
pm->data = 2*i;
pm->next = NULL;
pcur->next = pm;
pcur = pm;
}
}


直接上代码

LinkList * addList(LinkList *h1, LinkList *h2)
{
LinkList *p1 = h1->next;
LinkList *p2 = h2->next;
LinkList *phead = (LinkList *)malloc(sizeof(LinkList));
LinkList *pcur = NULL;

if (h1->data >= h2->data) //判断哪一个链表放在前面
{
phead = h2;
}
else
{
phead = h1;
}

pcur = phead;//这是我们的舞台
while (p1 && p2 )
{
//思想就是把两个链表小的通过尾插发放在舞台上
if (p1->data <= p2->data)
{
pcur->next = p1;
pcur = p1;
p1= p1->next;

}
else
{
pcur->next = p2;
pcur = p2;
p2= p2->next;
}
}
//如果两个链表还有没有结束的,直接放在后面就行了
if (p1)
{
pcur->next = p1;
}
else
{
pcur->next = p2;
}

return phead;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: