题目:编写算法程序将非递减有序的单链表中值相同的多余结点删除。设线性表为顺序存储结构。
1.需求分析
将非递减有序的单链表中值相同的多余结点删除,设线性表为顺序存储结构。
当用户输入的数组的关键码为非递减有序时,删除重复节点;当用户输入的数组的关键码并不是有序时,进行排序,然后删除重复的节点。
本程序处理int型和char型的数组。
2.概要设计
总体流程如下如:
ADT定义:
struct _Node{
struct _Node * next;
DataType data;
};
主要的函数:
int append(DataType _data);//追加到最后
int delete_current(Node * nd);//删除当前节点
int delete_next(Node * nd);//删除下一个节点
Node * get_next(Node * nd);//返回下一个节点
Node * get_list();//生成list
3.详细设计
流程图为:
其中直接插入排序算法的流程图如下:
4.调试分析
当用户输入的数组的长度超过最大值N时,程序发生错误。
当DataType为char型时,不能处理多于一位数的整数,如下:
数组长度:9
数组元素:1 9 89 3 2 67 7890 90
处理结果:
1 2 3 6 7 8 9
5.使用说明
运行程序,输入int型或char型数组,回车即出现结果。
6.测试结果
测试组一int型
数组长度:5
数组元素:12 0 989 34 0
处理结果:
0 12 34 98
测试组二char型
数组长度:7
数组元素: 9 4 3 2 0 8 3
处理结果:
0 2 3 4 8 9
测试组三char
数组长度:6
数组元素:1 q 3 e 3 w
处理结果:
1 3 e q w
7.附录
源程序文件清单。