数据结构之排序算法(一)
直接插入法是最简单的排序法,其排序思想如下:打牌时,每抓一张牌就将其放到对应的顺序位置。下面是待排记录的类型定义:
12345678910#define MAXSIZE 200typedef int KeyType//关键字类型typedef struct{KeyType key;//关键字InfoType otherinfo;//其他数据项}RedType;//记录类型typededf struct{RedType r[MAXSIZE+1];//r[0]闲置或作为哨兵int length;//顺序表长度}SqList;
上述的RedType结构体类型实际上是没必要定义的,实际做题时可以写成如下代码,更方便一点:
123456#define MAXSIZE 200typedef int KeyType//关键字类型typededf struct{KeyType r[MAXSIZE+1];//r[0]闲置或作为哨兵int length;//顺序表长度}SqList;
直接插入排序算法的描述:
12345678910111213 ...
数据结构课程设计之大爱线性表
2020数据结构课程设计之大爱线性表
大爱线性表不少参赛同学刚学数据结构,对线性表最是熟悉不过。这里我们给线性表增加两个特殊的操作,第一个是‘R’ 操作,表示逆转整个表,如果表长为L,原来的第i个元素变成第L-i+1个元素。第二个操作是‘D’,表示删除表的第一个元素,如果表为空,则返回一个“error”信息。我们可以给出一系列的‘R’ 和‘D’组合,例如“RDD”表示先逆转表,然后删除最前面的两个元素。
本题的任务是给定表和一个操作串S,求出执行S后的表,如果中途出现‘D’操作于空表,输出“error”。
输入第一行是一个整数,表示有多少组数据。每组测试数据格式如下:
(1)第一行是操作串S,有‘R’ 和‘D’组成,S的长度大于0,不超过100 000。(2)第二行是整数n,表示初始时表中的元素个数。n的值不小于0,不超过100 000。(3) 第三行是包含n个元素的表,用‘[’ 和 ‘]’括起来,元素之间用逗号分开。各元素值在[1,100]之间。
解题思路:1)对我而言,本题的难点在于如何正确处理输入与输出操作。所以在输入输出问题上要下功夫。2)如何处理R与D呢?此解法用了两 ...
数据结构课程设计之单词检查
2020数据结构课程设计之单词检查:
单词检查(Ⅰ)- 顺序表实现 许多应用程序,如字处理软件,邮件客户端等,都包含了单词检查特性。单词检查是根据字典,找出输入文本中拼错的单词,我们认为凡是不出现在字典中的单词都是错误单词。不仅如此,一些检查程序还能给出类似拼错单词的修改建议单词。 例如字典由下面几个单词组成: bake cake main rain vase 如果输入文件中有词vake ,检查程序就能发现其是一个错误的单词,并且给出 bake, cake或vase做为修改建议单词。 修改建议单词可以采用如下生成技术: (1)在每一个可能位置插入‘a-‘z’中的一者 (2)删除单词中的一个字符 (3)用‘a’-‘z’中的一者取代单词中的任一字符 很明显拼写检查程序的核心操作是在字典中查找某个单词,如果字典很大,性能无疑是非常关键的。 你写的程序要求读入字典文件,然后对一个输入文件的单词进行检查,列出其中的错误单词并给出修改建议。
123456课程设计必须采用如下技术完成并进行复杂度分析及性能比较。(1)朴素的算法,用线性表维护字典(2)使用二叉排序树维护字典(3)采用ha ...
数据结构之单链表的创建和逆转
一、单链表的创建
前插法(头插法)
后插法
二、单链表的逆转
一、单链表的创建1.前插法:思路:总将新节点插到链表前端,成为首元节点。
1234567891011121314151617typedef struct LNode { ElemType data; //结点的数据域 struct LNode* next; //结点的指针域} LNode, * LinkList; //LinkList为指向结构体LNode的指针类型void create_list_h(LinkList &L,int n){ L=new LNode; L->next=NULL;//建立带头结点的单链表 for(int i=n;i>0;i--) { LinkList p=new LNode;//生成新结点 cin>>p->data;//输入元素值 p->next=L->next; L->next=p;//插入到表头 }}
2.后插法:思路:总将节点插到链表的尾部
12345 ...
浅谈对结构体的理解
本文是学习过程中的思考与总结,存在许多不妥之处,若有幸被大牛指点出纰漏,必当及时更正,感激不尽!
一、什么是结构体?
二、结构体数组与结构体指针
三、结构体指针作为函数参数
四、typedef的用法
一、什么是结构体?
可以把结构体当作自定义的数据类型,它相当于一个容器,里面容纳了许多的基本数据类型(int ,float ,char ,double…诸如此类)。姑且把结构体所容纳的变量叫做成员变量。
1234567struct stu{ char *name; //姓名 int num; //学号 int age; //年龄 char group; //所在学习小组 float score; //成绩};
注意:结构体大括号后面的;不能丢,否则不是完整的语句。
既然结构体是一种数据类型,那么就可以用它来定义变量。
12345678910struct stu{ char *name; //姓名 int num; //学号 int age; //年龄 char group; //所在 ...
架构设计:进程还是线程?
架构设计:进程还是线程?是一个问题!文章目录
★进程【颗粒度】问题★“以业务逻辑为单元”划分进程的好处★进程间通讯(以下简称 IPC)问题★为啥还要线程?
就像莎士比亚的“To be, or not to be, that is the question”始终困扰着哈姆雷特,对于“进程还是线程?”这个问题,也经常困扰着那些进行软件架构设计的家伙。所以今天打算聊一下我对这个问题的体会。假如你还搞不清楚线程和进程的区别,请先找本操作系统原理的书好好拜读一下,再回来看帖。由于这个问题很容易引发口水战,事先声明如下:多进程和多线程,无法一概而论地说谁比谁好。因此本帖主要描述特定场景(与我所负责的产品相关)下,进程和线程的权衡经验,仅供大伙儿参考。 由于特定场景是本帖讨论的前提,先说说我目前负责的产品的特点:业务逻辑比较复杂、业务数据量比较大、对数据实时处理的性能要求比较高、对健壮性和安全性要求比较高、要求跨平台(包括操作系统、数据库)、某些情况下需要分布部署。 上面说了一大堆,其实有不少的应用系统符合上述特点,比如:某些网络游戏服务器、某些金融行业的业务系统、某些电子商务的交易系统等等 ...
架构设计:生产者/消费者模式
架构设计:生产者/消费者模式[0]:概述文章目录
★简介★优点★本系列的目录
今天打算来介绍一下“生产者/消费者模式”,这玩意儿在很多开发领域都能派上用场。鉴于该模式很重要且相关内容比较丰富,俺打算分几个帖子逐一介绍。今天先来扫盲一把。如果你对这个模式已经比较了解,请跳过本帖子,直接看下一个帖子(关于如何确定数据单元)。 看到这里,可能有同学心中犯嘀咕了:在四人帮(Gang Of Four)的23种模式里面似乎没听说过这种嘛!其实 GOF 那经典的23种模式主要是基于 OO 的(从书名《Design Patterns: Elements of Reusable Object-Oriented Software》就可以看出来)。而 Pattern 实际上即可以是 OO 的 Pattern,也可以是非 OO 的 Pattern 的。
★简介 言归正传!在实际的软件开发过程中,经常会碰到如下场景:某个模块负责产生数据,这些数据由另一个模块来负责处理(此处的模块是广义的,可以是类、函数、线程、进程等)。产生数据的模块,就形象地称为【生产者】;而处理数据的模块,就称为【消费者】。 单单 ...
如何防范黑客入侵?
如何防止黑客入侵[1]:避免使用高权限用户文章目录
★基本概念扫盲★反面教材★危害性★你该如何做?★可能的麻烦
为啥俺把这个话题列在头一条?——因为这是个非常普遍、且远远没有得到重视的问题。根据俺的经验,如果你能够养成好习惯,【不】使用高权限用户(尤其是管理员)进行日常操作,就可以大大降低被黑的概率。下面,俺就来具体介绍一下。
★基本概念扫盲 考虑到本文是面向外行人士,先进行一下名词解释。
◇用户权限 所谓的“用户权限”,通俗地说,就是某个用户的权力有多大。权力越大,能干的事情越多。
◇用户组 用户组,顾名思义,就是一组用户的集合。 在主流的操作系统中,“用户权限”通常是和“用户组”挂钩滴。针对不同的用户组,分配了不同的权限。 为了让用户省事儿,Windows 系统内置了若干用户组(比如:Users、Power Users、Guests、等)。这些内置的用户组,事先已经预定义好若干用户权限。
◇高权限用户 本文提及的【高权限用户】,主要是指 Windows 系统中 Administrators 组的用户或 Linux/Unix 系统中 root 组的用户。 另外,顺便 ...
社会工程学
扫盲“社会工程学”[0]:基本常识文章目录
★社会工程学是啥玩意儿?★为啥要了解社会工程学?★本系列帖子能给你啥帮助?★本系列帖子不能给你哪些帮助?
最近几年,信息安全方面的问题日益严重,许多同学深受其害(比如网络钓鱼、盗用银行卡、蠕虫木马泛滥、僵尸网络盛行等等)。俺窃以为,很大一部分原因在于相应的扫盲教育没有跟上。且不说普通的电脑菜鸟对信息安全一无所知,即便是很多 IT 公司的专业技术人员,对此也知之甚少。其后果就是:很多菜鸟级的攻击手法屡试不爽,很多平庸的攻击者屡屡得手。有鉴于此,俺打算抽空普及一下信息安全相关的东东,或许能对某些同学有所帮助。 其实信息安全方面的话题非常之多,俺经过左思右想之后,决定先拿社会工程学来扫盲一下。至于为啥先说它,后面会解释原因。
★社会工程学是啥玩意儿? 俺喜欢把信息安全分为【硬安全】和【软安全】两部分。所谓“硬安全”主要包括具体的 IT 安全技术(比如:防火墙、入侵检测、漏洞扫描、拒绝服务攻击、缓冲区溢出攻击 ……);而“软安全”主要涉及管理、心理学、文化、人际交往等方面,与具体的 IT 技术无关。今天所说的社会工程学,实际上就是“软安全”的 ...