博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
编程珠玑: 13章 搜索 13.2使用链表结构,生成[0 ,maxval]范围内m各随机整数的有序序列 -------解题总结
阅读量:3656 次
发布时间:2019-05-21

本文共 2368 字,大约阅读时间需要 7 分钟。

#include 
#include
using namespace std;/*问题:使用链表,生成[0 ,maxval]范围内m各随机整数的有序序列分析:这是典型的插入排序。每次将一个带插入的元素插入到前面已经排好序的结果中。 1】先查找到待插入位置,2】修改结点指针指向输入: 100(元素最大值) 10(输出的元素个数) 输出; 输出10个0~100且有序的元素 */typedef struct Node{ Node():_next(NULL){} Node* _next; int _value;}Node;int randRange(int min ,int max) { if(min > max) { int temp = min; min = max; max = min; } return ( rand() % (max - min + 1) + min ); } template
class IntSetList{public: IntSetList(int maxVal) { _maxVal = maxVal; _head = NULL; _n = 0; } void setHead(Node* head) { _head = head; _n = 1; } ~IntSetList() { deleteList(); } void deleteList() { Node* node = _head; //每个结点先要寻找到下一个指针,再删除 while(node) { Node* nextNode = node->_next; delete(_head); node = nextNode; } } void insert(T value) { //如果没满,先寻找插入的位置(必须确保不重复),然后修改指针指向 Node* node = _head; Node* previousNode = NULL; while(node) { if(node->_value < value) { previousNode = node; node = node->_next; } //重复,不插入,直接返回 else if(node->_value == value) { return; } //这里说明找到了不重复的元素,插入 else { //如果不是首次插入 if(previousNode) { Node* newNode = new Node(); newNode->_value = value; previousNode->_next = newNode; newNode->_next = node; _n++; return; } //如果是首次插入,需要修改头结点指针 else { Node* newNode = new Node(); newNode->_value = value; newNode->_next = _head; _head = newNode; _n++; return; } } } //走到这里说明:待插入的元素恰好是在链表尾部,需要插入 Node* newNode = new Node(); newNode->_value = value; previousNode->_next = newNode; _n++; } int size() { return _n; }public: Node* _head;//头指针 //int _maxSize;//链表本来就是适用结点数量未知的情形 int _maxVal; int _n;//记录当前有多少个结点};void print(IntSetList
list){ Node* head = list._head; while(head) { cout << head->_value << " "; head = head->_next; } cout << endl;}void process(){ int maxVal; int maxSize; while(cin >> maxVal >> maxSize) { IntSetList
intSetList(maxVal); while(intSetList.size() < maxSize) { int value = randRange(0 , maxVal); //非首次插入 if(intSetList.size() > 0) { intSetList.insert(value); } //首次插入,需要建立头结点 else { Node* head = new Node(); head->_value = value; intSetList.setHead(head); } } print(intSetList); }}int main(int argc , char* argv[]){ process(); getchar(); return 0;}

转载地址:http://zhofn.baihongyu.com/

你可能感兴趣的文章
完美解决:Ubuntu 12.04右键没有打开终端选项
查看>>
快速理解:memmove和memcopy的区别
查看>>
strsep函数详解
查看>>
秒懂之atoi()函数!
查看>>
一分钟快速理解:模拟信号和数字信号!
查看>>
MQTT之QoS
查看>>
【JavaWeb开发】"web应用程序的根目录"与"web站点的根目录"的分析
查看>>
【JavaWeb开发】EL表达式和JSTL标签的使用
查看>>
Spring学习(6)-Spring Bean的生命周期
查看>>
Spring学习(8)-AOP之ProxyFactoryBean、RegexMethodPointcutAdvisor、BeanNameAutoProxyCreator
查看>>
Spring学习(9)-AOP之使用aop:config标签
查看>>
【JavaWeb】常见数据库和JDBC错误的解决思路
查看>>
springmvc的静态资源无法访问解决方法(基本全面)
查看>>
【记坑】freemarker拿不到对象的值
查看>>
Maven基础学习(全面)
查看>>
oracle之40道经典的sql练习
查看>>
最详细的Spring-data-jpa入门(一)
查看>>
win7/win10下的jdk的安装和环境变量的配置
查看>>
PAT乙级_1077 互评成绩计算 (20 分)_python
查看>>
PAT乙级_1088 三人行 (20 分)_python
查看>>