实现两个链表合并(数据结构课程方案c语言版本).docVIP

  • 13
  • 0
  • 约3.13千字
  • 约 10页
  • 2019-03-11 发布于江苏
  • 举报

实现两个链表合并(数据结构课程方案c语言版本).doc

课程设计报告 课程设计题目:实现两个链表的合并 学生姓名黎微微 专 业 计算机信息管理 班 级1141301 指导教师 吴志强 2013年 01月 08 日 课程设计目的: 课程设计为学生提供了一个既动手又动脑,独立实践的机会,将课本上的理论知识和实际有机的结合起来,锻炼学生的分析解决实际问题的能力。提高学生适应实际,实践编程的能力。 课程设计题目: 实现两个链表的合并 要求:1)输入2个单链表 2)输出2个单链表合并后形成的结果。 三、模块划分: (1)数据模块 参考使用课本上的具有头结点的链表抽象数据类型linklist,该抽象数据类型中包含一个elemtype类型的数据和一个指针,在开始用时,elemtype定义为整型变量,指针用来指向下一个元素。对应的使用链表抽象数据类型linklist基本操作的函数有:初始化操作函数void ini(linklist *s)。 (2)创建链表模块 void create(linklist *s) 其功能是创建链表录入数据。 (3)输出数据模块 void display(linklist *s) 其功能为是输出s链表中的各项元素,从而验证操作是否成功 (4)排序模块 void sort(linklist *s) 此函数功能是s链表使用冒泡法对链表进行排序 (5)合并链表模块 void add(linklist *s1,linklist *s2) 其功能是按照题目要求实现两个链表的合并,将s2链表插入到s1链表中。 (6)主函数模块 void main(),函数中调用了各个模块的函数,从而实现了题目合并排序的要求 四、流程图: Creat s1链表 对s1进行排序 对s1进行排序 Creat Creat s2链表 对s2进行排序 对s2进行排序 对排序后的s1.s2链表合并 S1为null s1!=null 将s2插入s1中S1=s2 将s2插入s1中 S1=s2 显示s1(即合并后的链表) 结束 结束 五、算法设计分析 这个两个链表的交叉合并算法主要运用到的是链表的基本操作,定义节点,将链表的创建、链表的插入、链表内容升序排列,通过主函数调用。这样就大大精简了主函数的操作。但主函数中很大篇幅用到了if、else语句,用以指定链表指定结点,这样就使得本来很精简变得繁琐,降低了程序的质量。所以其有优点和缺点,但需要不断的改进,不断优化该程序。 六、数据结构: (1)数据类型DataType定义如下: typedef int elemtype; (2)带头结点链表抽象数据类型的结点结构定义如下: typedef struct node { elemtype data; struct node *next; }linklist; 七、源程序: #define null 0 typedef int elemtype; typedef struct node { elemtype data; struct node *next; } lin; void inia(lin *a) { a-next=null; } void create(lin *a) { lin *p,*q=a; elemtype e; printf(please input the data;\n); scanf(%d,e); while(e!=-1) { p=(lin *)malloc(sizeof(lin)); p-data=e; q-next=p; q=q-next; scanf(%d,e); } q-next=null; } void display(lin *a) { lin *p=a-next; if(a-next==null) printf(the lin is empty!\n); else { printf(output the data:\n); while(p!=null) { printf(%5d,p-data); p=p-next; } } printf(\n); } void sort(lin *a) { lin *p,*q; elemtype t; p=s-next; while(p!=null) { q=p-next; while(q!=null) { if(p-dataq-data)

文档评论(0)

1亿VIP精品文档

相关文档