单链表中重复元素的删除(8817)_第1页
单链表中重复元素的删除(8817)_第2页
单链表中重复元素的删除(8817)_第3页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、单链表中重复元素的删除(8817)一、题目1、问题描述按照数据输入的顺序建立一个单链表,并将单链表中重复的元素删除(值相同的元素只保留最初输入的一个)。2、输入第一行输入元素个数n;第二行输入n个整数;处理到文件结束。3、输出第1行输出删除重复元素后的单链表元素个数;第2行输出删除重复元素后的单链表;4、输入例1021 30 14 55 32 63 11 30 55 305、输出例721 30 14 55 32 63 11二、算法指导1、数据结构根据题目要求,数据要存储于单链表,首先要确定建立的单链表的结点类型,结点类型可为:typedef struct node int data; node

2、 *next; *linklist; 这里的linklist为指针类型,其变量为指向node的结点。2、算法思路(1) 设计初始化单链表的函数int initlist_l(linklist &l);以建立带头结点的空单链表。int initlist_l(linklist &l) / 构造一个带头结点的空单链表l,l是引用参数,是变参,其值其他函数要用。 (2) 设计建立有n个结点的单链表函数void createlist_l(linklist l,int n)。可用后插法建立单链表。这里的l开始时已指向单链表的头结点,l的值已不会变,所以只要值参就可以。n为要建立的非降序排列单

3、链表的结点个数,由主函数传入。void createlist_l(linklist l,int n) for(n次重复做)输入数据d;产生新结点p,并把d 赋值给p;把新结点p链接到链表l的尾部; (3) 输出单链表。void print(linklist l) / 按输出格式要求输出单链表l中结点的值 (4) 设计单链表中重复元素的删除的函数void dele(linklist la,int &n),la为单链表,n为la中的结点个数,删除重复结点后,n的值要减小,其值要函数外面要用,所以用引用参数。其算法思想是从la的第一个结点开始的各结点,依次与其后面的各个结点比较,若其值相等,

4、则将其后面的结点删除。要注意到删除结点时,不要断链,既要删除结点,也要抓住被删除结点的后面的结点,以便继续处理。void dele(linklist la,int &n) p指向la表的第一个结点;/ 从la的第一个结点开始的各结点 while(p不空) / 扫描la表中的各结点 p2指向p的下一个结点; / 准备扫描p的后续结点 p1取p的值; / p1跟在p2的后面,准备链接被删结点的后一结点;while(p2不空) / 扫描p的各后续结点 if(p所指结点的值等于p2所指结点的值) / 找到重复结点 p2所指结点的后一结点链接在p1结点后面;/ 绕过重复结点 p2指向其下一结点; / 为继续扫描准备 删除重复结点(原p2所指结点); 链表的结点数减一; else p2指向其下一个结点; / 准备扫描下一个结点p1跟在p2的后面; p指向其下一个结点; / 准备检查下一个结点是否有重复结点 3、主函数main()调用initlist_l(),初始化单链表la;调用createlist_l(),建立有n个结点

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论