第四、五章解决队列和串的编程问题

第四章      解决队列的编程问题

队列是一种特殊的线性表,是一种只允许在表的一端进行插入操作而在另一端进行删除操作的线性表。把进行插入操作的表尾称为队尾,进行删除操作的头部称为对头;

队列的主要特点是:先进先出,或后进后出

用一片连续的存储空间来存储队列中的数据元素,这样的队列称为顺序队列

将顺序队列看成是首位相接的循环结构,这种队列叫做循环队列

第五章      解决串的编程问题

串即字符串,是由0个或多个字符组成的有限序列,是数据元素为单个字符的特殊线性表。

顺序结构存储串:

串的静态存储结构即顺序存储结构是用一组地址连续的存储单元存储串的字符序列。因此可用高级语言的字符数组来实现。不同的语言在用数组存放字符串时,其处理方式可能有所不同。

1)  C语言:先预先定义数组的大小,为每个串变量分配一个固定长度的数组,接着再使用定长的字符数组存放串内容外,一般可使用一个不会出现在传中的特殊字符“\0”放在串值的末尾来表示串的结束。如下图,存储字符串“abc”,申请的存储区域可能大于实际的大小。

2)  C#等.net语言中,字符串用常量的方式存储。这意味着,当你用C#创建一个字符串时,该字符串以一种固定大小存储在内存中以便CLR(通用语言运行时)运行更快一点。如下图,存储字符串“abc”。

凯撒密码

凯撒密码是一种简单的密码加密算法,通过将信息中的每个字母在字母表中向后移动常量k,以实现加密。例如,k=3,则a->d,b->e等;即映射关系为:

F(a)=(a+k)mod n

其中,a为要加密的字母;k为移动的位数,n是字母的长度。

要解密信息,则将每个字母向前移动相同数目的字符即可。例如,如果k=3,对于已加密信息frpsxwhu vbvwhpv,将解密为computer system;

【基本要求】

编写程序实现加密和解密算法

C#代码实现如下:

1)  凯撒加密解密类封装

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

namespace LinkStack

{

class Kaiser_EncDec

{

/// <summary>

/// 加密算法

/// </summary>

/// <paramname="str"></param>

/// <paramname="k"></param>

///<returns></returns>

public static stringEncrypt(string str, int k)

{

string res =string.Empty;

char[] chalst =str.ToCharArray();

int len =str.Length;

for (int i = 0; i < len; i++)

{

inttmp=(int)chalst[i];

if (tmp >=65 && tmp <= 90)

{

tmp =(tmp-65 + k) % 26+65;

}

else if (tmp>= 97 && tmp <= 122)

{

tmp = (tmp- 98 + k) % 26 + 98;

}

res +=Encoding.ASCII.GetString(new byte[]{(byte)tmp});

}

return res;

}

/// <summary>

/// 解密算法

/// </summary>

/// <paramname="str"></param>

/// <paramname="k"></param>

///<returns></returns>

public static stringDecrypt(string str, int k)

{

string res =string.Empty;

char[] chalst =str.ToCharArray();

int len =str.Length;

for (int i = 0; i< len; i++)

{

int tmp =(int)chalst[i];

if (tmp >=65 && tmp <= 90)

{

tmp = (tmp - 65 - k+26) % 26 + 65;

}

else if (tmp>= 97 && tmp <= 122)

{

tmp = (tmp- 98 - k+26) % 26 + 98;

}

res +=Encoding.ASCII.GetString(new byte[] { (byte)tmp });

}

return res;

}

}

}

2)  主程序调用

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

namespace LinkStack

{

class Program

{

static voidMain(string[] args)

{

string str ="Computer system";

Console.WriteLine("要加密的字符串:"+str);

stringstr_1=Kaiser_EncDec.Encrypt(str, 3);

Console.WriteLine("加密后的字符串:" + str_1);

stringstr_2=Kaiser_EncDec.Decrypt(str_1, 3);

Console.WriteLine("解密后的字符串:" + str_2);

Console.ReadKey();

}

}

}

时间: 2024-12-11 10:36:53

第四、五章解决队列和串的编程问题的相关文章

C Primer Plus (第五版) 第五章 编程练习

第五章 运算符.表达式和语句 编程练习 1.编写一个程序.将用分钟表示的时间转换成以小时和分钟表示的时间.使用#define或者const来创建一个代表60的符号常量.使用while循环来允许用户重复键入值,并且当键入一个小于等于0的时间时终止循环. #include <stdio.h> #define H 60 int main(void) { //此处注释部分在程序中等价于#define //const int H = 60; int m; printf("请输入分钟(输入0退出

《构建之法》第三、四、五章学习总结

第三章讲的是关于如何成为一名合格甚至优秀的软件工程师.第一节主要讲的是个人能力的发展与团队合作的关系:第二节讲的则是关于软件工程师的职业发展:最后一节通过用魔方举例向我们讲述了怎样提升自己的技能. 第四章讲的是关于软件开发时两个人该怎样合作.这一章的前三节讲的都是关于代码规范,包括风格规范和设计规范:第四节讲的是关于代码复审时的问题,代码复审的正确定义是看代码是否在"代码规范"的框架内正确地解决了问题:第五节讲的是结对编程 :第六节介绍了两人合作的不同阶段和需要了解的相关技巧. 第五章

第四十五章

第四十五章1 老子是在教导我们不追求完美吗? 大成若缺,其用不弊 最完美的东西,好似有残缺一样,但它的作用永远不会衰竭. 做事忘记结果,才能更坦然. 各位朋友大家好,今天我们接着来讲<道德经>,来听听老子老先生给我们带来什么样的人生启发.今天我们来到了第四十五章的讲解. 时光过的非常快,从我去年开始讲到现在,已经讲了二百多期,已经第四十五章了,<道德经>共八十一章,我们讲了一半出头了,这时间还是比较快的.有很多朋友听完以后觉得特别开心,心里不纠结了,我看到这样的留言我很开心.有人说

web—第四章css&amp;第五章

web—第四章css&第五章 终于迎接等待已久的CSS,在没学这个之前,我们只会用一点img,查一点小图片,或者是用style改一下颜色,而且比较麻烦.现在多了个css在文件夹在创建一个css文件很多东西都可以在css里面而且修改的话非常方便,但是我还是有一些问题,就是老师叫我们做注册表的时候:年月日我真不相信是用下拉列表一个一个打上去的,我一开始想用时间轴但是太难啦,老师也没说. 随着时间过得很快国庆节也要来临了,这几天老师似乎有点急但是又怕教不好我们所以课程会有点紧张,但是我觉得还是很好跟上

CSS3秘笈复习:十三章&amp;十四章&amp;十五章&amp;十六章&amp;十七章

第十三章 1.在使用浮动时,源代码的顺序非常重要.浮动元素的HTML必须处在要包围它的元素的HTML之前. 2.清楚浮动: (1).在外围div的底部添加一个清除元素:clear属性可以防止元素包围浮动元素.关键字:left.right或both. (2).浮动外围元素:让包含浮动元素的<div>也浮动.选择这种方法一定要在浮动容器后面的任何元素中添加一个clear属性,确保浮动元素落到容器的下方. (3).利用overflow : hidden.另一种常见的方法是在外围的样式中添加以下属性:

Gradle 1.12用户指南翻译——第四十五章. 应用程序插件

文由CSDN博客貌似掉线翻译,其他章节的翻译请参见: http://blog.csdn.net/column/details/gradle-translation.html 翻译项目请关注Github上的地址: https://github.com/msdx/gradledoc 本文翻译所在分支: https://github.com/msdx/gradledoc/tree/1.12. 直接浏览双语版的文档请访问: http://gradledoc.qiniudn.com/1.12/usergu

构建之法第四、第五章读后感

第四第五章着重讲了合作的重要性,从两人合作到团队合作,编程开发都不是一件容易的事情,要注意许多要点. 代码书写的规范. 你写的代码不仅仅是给机器看的,给你看的,也是给其他人看的,是给合作的队友看的,在写的过程中要注意规范,要注意缩进.行宽.对齐等格式. 代码设计的规范. 函数中,你就只实现函数的具体功能,如构造函数,简单初始化所有数据成员即可. 代码复审. 找出代码的编辑错误.逻辑错误.算法错误跟潜在错误. 合作需要讲究技巧,要运用合理的方式影响合作的对方,尽量运用逻辑加感情,使对方能快速地接受

Java(第四章和第五章)

第四章 一.             switch结构(开关语句)的语法 switch(表达式[dream1] ){ case  常量1[dream2] : //语句块1 break[dream3] ; case  常量n[dream4] : //语句块n break; default[dream5] : //语句块 break; } 二.             switch结构使用场合:   int \char  2种类型的等值判断下使用 三.             switch结构和if

提供跟老男孩学Linux运维Shell编程实战的第四、第五章源代码

第四章是讲Shell变量知识进阶与实践: 第五章是讲变量的数值计算实践: 附件中包括源码,请下载. 该两章在学习时要注意相关事项: 1.注意标点符号的使用:例如,单引号,反引号,双引号等: 2.注意该要留空格的留空格: 3.注意特殊变量的作用: 4.内置变量的使用: 5.算术运算任的使用.