c语言顺序表的简历,合并,归并算法实现

hacker__liang 2012-03-14 01:10:19
线性表LA=(3,5,8,11),LB=(2,6,8,9,11,15,20);要求用顺序表实现,给出所用数据类型中每个操作的伪码算法 (1),若LA和LB分别表示两个集合A和B,求新集合A=A∪B,(即“并”操作,相同元素不保留);预测输出
LA=(3,5,8,11,2,6,9,5,20)。
(2)将LA与LB表归并,仍要有序,相同元素要保留,预测输出LC=(2,3,5,6,8,9,11,15,20)。
...全文
218 3 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
hacker__liang 2012-03-15
  • 打赏
  • 举报
回复
老大,题目要求是顺序表不是链表啊.....不过还是感谢你的回帖,因为我们正在学习链表了!
vanxeger 2012-03-14
  • 打赏
  • 举报
回复
数据结构与算法,书上有代码!
尘缘udbwcso 2012-03-14
  • 打赏
  • 举报
回复

#include <stdio.h>
#include <malloc.h>
#include <stdlib.h>

typedef struct node
{
int data;
struct node *next;
}linkNode, *linklist;

/*
*功能:初始化链表
*返回值:链表首地址
*/
linklist initList()
{
linklist head;
head = (linklist)malloc(sizeof(linkNode));
if(head == NULL)
return NULL;
head->next = NULL;
return head;
}

/*
*功能:输出链表数据
*参数:链表首地址
*/
void printList(linklist head)
{
if(head == NULL || head->next == NULL)
return;
head = head->next;
printf("\nlinklist:\n");
while(head != NULL)
{
printf("%d ", head->data);
head = head->next;
}
printf("\n");

}
/*
*功能:申请空间
*参数:结点(数据)
*返回值:指向结点的指针
*/
linklist makeNode(linkNode nodeData)
{
linklist newNode;
newNode = (linklist)malloc(sizeof(linkNode));
if(newNode == NULL)
return NULL;
newNode->data = nodeData.data;
return newNode;
}


/*
*功能:在链表尾部插入结点
*参数:链表首地址,待插入结点地址
*/
void pushBack(linklist head, linklist insertNode)
{
if(head == NULL)
return;
while(head->next != NULL)
{
head = head->next;
}
head->next = insertNode;
insertNode->next = NULL;
}

/*
*功能:合并链表
*参数:两个链表首地址,合并后链表首地址
*/
void mergeLink(linklist La, linklist Lb, linklist Lc)
{
La = La->next;
Lb = Lb->next;
while (La && Lb)
{
if (La->data > Lb->data)//将data较小的连接到Lc
{
Lc->next = Lb;
Lb = Lb->next;
}
else if(La->data == Lb->data)
{
Lc->next = La;
La = La->next;
Lb = Lb->next;
}
else
{
Lc->next = La;
La = La->next;
}
Lc = Lc->next;
}
Lc->next = La ? La : Lb;//将La 或 Lb剩下的部分连接到Lc
}

int main()
{
linklist La, Lb, Lc,insertNode;
linkNode newNode;
int dataA[] = {3,5,8,11};
int dataB[] = {2,6,8,9,11,15,20};
int i;
La = initList();
Lb = initList();
Lc = initList();
for(i = 0; i < 4; ++i)
{
newNode.data = dataA[i];
insertNode = makeNode(newNode);
pushBack(La, insertNode);
}
for(i = 0; i < 7; ++i)
{
newNode.data = dataB[i];
insertNode = makeNode(newNode);
pushBack(Lb, insertNode);
}
printList(La);
printList(Lb);
mergeLink(La, Lb, Lc);
printList(Lc);
system("pause");
return 0;
}

70,024

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧