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)。
...全文
211 3 打赏 收藏 转发到动态 举报
写回复
用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;
}
算法C语言实现 (第1-4部分)基础知识、数据结构、排序及搜索(原书第3版) 本书是Sedgewick彻底修订和重写的C算法系列的第一本。全书分为四部分,共16章。第一部分“基础知识”(第1—2章)介绍基本算法分析原理。第二部分“数据结构”(第3~5章)讲解算法分析中必须掌握的数据结构知识,主要包括基本数据结构、抽象数据结构、递归和树。第三部分“排序”(第6~11章)按章节顺序分别讨论基本排序方法(如选择排序、插入排序、冒泡排序、希尔排序等)、快速排序方法、归并归并排序方法、优先队列与堆排序方法、基数排序方法以及特殊用途的排序方法,并比较了各种排序方法的性能特征。第四部分“搜索”(第12~16章)在进一步讲解符号、树等抽象数据类型的基础上,重点讨论散列方法、基数搜索以及外部搜索方法。 书中提供了用C语言描述的完整算法源程序,并且配有丰富的插图和练习。作者用简洁的实现将理论和实践成功地结合了起来,这些实现均可在真实应用上测试,使得本书自问世以来备受程序员的欢迎。 本书可作为高等院校计算机相关专业算法与数据结构课程的教材和补充读物,也可供自学之用。 目录 出版者的话 译者序 前言 第一部分 基础知识  第1章 引言   1.1 算法   1.2 典型问题——连通性   1.3 合并一查找算法   1.4 展望   1.5 主题概述  第2章 算法分析的原理   2.1 实现和经验分析   2.2 算法分析   2.3 函数的增长   2.4 大O符号   2.5 基本递归方程   2.6 算法分析示例   2.7 保证、预测及局限性 第二部分 数据结构  第3章 基本数据结构   3.1 构建组件   3.2 数组   3.3 链   3.4 链的基本处理操作   3.5 链的内存分配   3.6 字符串   3.7 复合数据结构  第4章 抽象数据类型   4.1 抽象对象和对象集   4.2 下推栈ADT   4.3 栈ADT客户示例   4.4 栈ADT的实现   4.5 创建一个新ADT   4.6 FIFO队列和广义队列   4.7 复制和索引项   4.8 一级ADT   4.9 基于应用的ADT示例   4.10 展望  第5章 递归与树   5.1 递归算法   5.2 分治法   5.3 动态规划   5.4 树   5.5 树的数学性质   5.6 树的遍历   5.7 递归二叉树算法   5.8 图的遍历   5.9 综述 第三部分 排序  第6章 基本排序方法   6.1 游戏规则   6.2 选择排序   6.3 插入排序   6.4 冒泡排序   6.5 基本排序方法的性能特征   6.6 希尔排序   6.7 对其他类型的数据进行排序   6.8 索引和指针排序   6.9 链排序   6.10 关键字索引统计  第7章 快速排序   7.1 基本算法   7.2 快速排序算法的性能特征   7.3 栈大小   7.4 小的子文件   7.5 三者取中划分   7.6 重复关键字   7.7 字符串和向量   ……  第8章 归并归并排序  第9章 优先队列和堆排序  第10章 基数排序  第11章 特殊用途的排序方法 第四部分 搜索  第12章 符号和二叉搜索树  第13章 平衡树  第14章 散列  第15章 基数搜索  第16章 外部搜索

69,382

社区成员

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

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