- 博客(36)
- 资源 (1)
- 收藏
- 关注
原创 实验二 用户接口
实验二 用户接口1. 实验要求(1)掌握Shell环境变量、管道、输入输出重定向的使用方法;(2)熟悉Shell程序设计。2. 实验内容输入输出重定向:① 新建文件file1,输入:Hello,Linux!保存并退出。新建文件file2,输入:World!保存并退出。将file1和file2的内容显示在终端上,并重定向到文件file3。将file1的内容追加到文件file3。② 管道:统计文件file3中出现“hello”的行数并显示。③ 管道和输入输出重定向:进入
2021-10-15 17:08:59 623
原创 实验一 Linux基本操作
实验一 Linux基本操作1. 实验要求(1)掌握启动和退出Linux 操作系统方法;(2)了解与熟悉Linux 操作系统常用的Shell命令使用;(3)掌握Linux 操作系统下C程序的编辑、编译与调试运行方法。2. 实验内容练习Linux的文件操作、目录操作、系统管理的命令;① 注销(退出)系统:logout 或exit,关机:shutdown② 练习使用命令ls(注意Linux命令区分大小写):使用ls 查看当前目录内容,查看指定目录内容,如/目录、/etc目录,查看当前目录
2021-10-15 16:51:42 11007 1
原创 3.2.5--表达式求值
一、题目及分析表达式求值是程序设计语言编译的一个最基本问题,其中任何一个表达式都是由操作数、运算符(±*/)、界限符(#,(,),[,] )组成。运算符和界限符统称算符。算符的优先级关系为(数学角度上):代码:#include <iostream>//ZJJ数据据结构-栈3.2.5#define STACK_INIT_SIZE 100//存储空间初始分配量 #define STACKINCREMENT 10//分配增量typedef struct { char* base; c
2021-09-22 19:40:30 237
原创 3.2.4--迷宫求解
一、题目及分析求迷宫中从入口到出口的所有路径是一个经典的程序设计问题。由于计算机解决迷宫问题时,通常用的是“穷举求解”的方法,即从口出发,顺某方向向前探索,若能走通,则继续往前走;否则沿原入口路退回,换一个方向再继续探索,直至所有可能的通路都探索到为止。为了保证在任何位置上都能沿原路退回,显然需要用一个后进先出的结构来保存从入口到当前位置的路径。因此,在求迷宫通路的算法中应用“栈”。也就是自然而然的事了。二、思路代码:结构体构造:typedef struct//坐标{ int x; in
2021-09-04 17:57:20 575 2
原创 3.2.3--行编辑程序
行编辑程序一个简单的行编辑程序的功能是:接受用户从终端输入的程序或数据,并存入用户的数据区。由于用户在终端上输入时,不能保证不出差错,因此,若在编辑行中,“每接受一个字符,即存入用户数据区”的做法显然是不恰当的。较好的做法是,设立一个输入缓冲区,用于接受用户输入的一行字符,然后逐行存入用户数据区。允许用户输入出差错,并在发现有误时,及时更正。例如,当用户发现刚刚键入的一个字符是错误的时候,可以补进一个退格符“#”,以表示前一个字符无效;如果发现当前键入的行内差错较多的话,则可以键入一个退格符“@”,以表示
2021-09-01 13:27:17 1078
原创 3.2.2--括号匹配的检验
3.2.2–栈的应用(括号匹配的检验)《数据结构》严蔚敏版习题3.2.2,括号匹配问题。是顺序栈的课后习题。原问题:假设表达式中允许包括两种括号:圆括号和方括号,其嵌套方式随意,即(【】())等都是正确的格式,【(】)是不正确的格式。设计一个算法检查输入的字符串中的括号是否是匹配的。思路:建立数组遍历,遇到<{([则入栈>}])则进行匹配出栈操作,如不匹配则也压入栈。第一个元素为>}])直接为不匹配,最后栈为空说明括号匹配。代码:#include<iostream>/
2021-08-24 19:47:23 267
原创 3.2.1--栈的应用(数制转换)
3.2.1–栈的应用(数制转换)数制转换在计算机中经常面对不同数制的转换问题,如将一个十进制数N转换为d进制B。数制转换的解决方法很多,其中一个简单的转换算法是重复下述两步。直到N等于零为止。x = N mod dN = N div d其中,N为需要转换的十进制数,d为转换后的进制,x值为转换后各个数位上的数,div为整除运算,mod为求余运算。算法的运行过程为:第一次求出的x值为d进制数的最低位,最后一次求出的x值为d进制数的最高位,所以上述算法是从低位到高位顺序产生d进制的各位,然后逆序输出,
2021-08-15 23:43:48 564
原创 3.1-栈的链式储存表示
链式存储结构栈的链式存储结构,简称链栈。 由于栈只是栈顶在做插入和删除操作,所以栈顶应该放在单链表的头部。另外,都有了栈顶在头部了,单链表中的头结点也就失去了意义,通常对于链栈来说,是不需要头结点的。 对于链栈来说,基本不存在栈满的情况,除非内存已经没有使用空间了。 对于空栈来说,链表原来的定义是头指针指向空,那么链栈的空其实就是top=NULL。结构体typedef struct StackNode{ int data;//结点数据域 struct StackNode* next;
2021-08-15 18:49:16 141
原创 3.1-栈的顺序表示及栈的顺序储存表示
3.1-栈的顺序表示及栈的顺序储存表示1.栈的定义:在表尾进行插入和删除操作的线性表(仍然满足线性表的操作,只是在push和pop有些区别)栈顶(top)允许插入和删除,另一端称栈底(bottom),不含任何数据元素的栈叫空栈。栈:后进先出(last in first out)的线性表,简称LIFO结构。栈的插入称为进栈,也称压栈,入栈。栈的删除称为出栈,也称弹栈。2.栈的抽象数据结构因为栈本身就是一个线性表,所以线性表的操作特性它都具备,针对它的特殊性,在它的操作上可能会有一些变化。将进栈
2021-08-12 16:21:34 573
原创 2.22--【线性表】应用—一元多项式的表示及相加
【线性表】应用—一元多项式的表示及相加typedef struct polynode{ int coef; int exp; polynode* next;}polynode,*polylist;例:建立一元多项式链式存储算法【算法思想】通过键盘输入一组多项式的系数和指数,用尾插法建立一元多项式的链表。以输入系数0为结束标注,并约定建立多项式链表时,总是按指数从小到大排序。【算法描述】polylist CreatList(){ polynode* head = (polynod
2021-08-10 23:37:07 1054
原创 2.18--2.19双向链表的基本操作
2.18–2.19双向链表的基本操作1.双向链表的定义首先,双链表的结构声明如下:一个前驱节点的指针,一个后继节点的指针和数据域typedef struct DouNode { ElemType data; struct DouNode* pre; struct DouNode* next;}DouNode;双向链表特点 1.每次在插入或删除某个节点时, 需要处理四个节点的引用, 而不是两个. 实现起来要困难一些 2.相对于单向链表, 必然占用内存空间更大一些. 3.既可以从头
2021-08-10 17:14:43 106
原创 2.13---2.17-静态链表操作详解
2.14—2.15静态链表操作详解链表的一些基本操作,包括对表中数据元素的添加、删除、查找和更改。本节是建立在已能成功创建静态链表的基础上,因此我们继续使用上节中已建立好的静态链表学习本节内容,建立好的静态链表如图 1 所示:静态链表添加元素例如,在图 1 的基础,将元素 4 添加到静态链表中的第 3 个位置上,实现过程如下:1.从备用链表中摘除一个节点,用于存储元素 4;找到表中第 2 个节点(添加位置的前一个节点,这里是数据元素 2),将元2.素 2 的游标赋值给新元素 4;3.将元素
2021-08-09 17:15:15 258
原创 2.12-静态链表基本操作详解
静态链表基本操作详解静态链表,也是线性存储结构的一种,它兼顾了顺序表和链表的优点于一身,可以看做是顺序表和链表的升级版使用静态链表存储数据,数据全部存储在数组中(和顺序表一样),但存储位置是随机的,数据之间"一对一"的逻辑关系通过一个整形变量(称为"游标",和指针功能类似)维持(和链表类似)。例如,使用静态链表存储 {1,2,3} 的过程如下:创建一个足够大的数组,假设大小为 6,如图 1 所示:接着,在将数据存放到数组中时,给各个数据元素配备一个整形变量,此变量用于指明各个元素的直接后继元素所
2021-08-06 16:08:47 819
原创 2.11-俩个有序链表并为一个有序链表
俩个有序链表并为一个有序链表LinkList Union(LinkList &A,LinkList& B, LinkList& C)//链表的合并函数 { LinkList a, b,c; a = A->next; b = B->next; c=C; while (a && b) { if (a->data >= b->data) { c->next = b; c = b; b = b->
2021-08-05 16:00:38 150
原创 2.10-头插法尾插法建立链表
头插法建立单链表头插法会使输入的数据插入到链表的表头,输出数据时的数据与读入的数据时相反的,如,以1 2 3 4 5 6 7 8 9建立链表,输出的结果是9 8 7 6 5 4 3 2 1 。第一个元素会始终在链表的尾部1.建立一个空表,此时头指针L指向头结点,L->Next=NULL,如图2.while的第一次循环,插入第一个结点,进行如下操作代码如下:#include<iostream>//ZJJ数据据结构-单链表2.10using namespace std;typ
2021-08-05 13:53:46 176
原创 2.8-2.9单链表的基本操作详解
单链表的基本操作详解单链表的创建、插入、删除、修改、查找等基本操作单链表的结点上存储数据data和下个结点的地址——后继指针next,所以可以定义一个结构体存储这两个元素://结点结构体typedef struct Node { int data; struct Node* next;}Node;创建结点:Node* CreateNode(int data)//创建结点{ Node* node = (Node*)malloc(sizeof(Node));//申请内存 node-&g
2021-07-29 17:25:34 150
原创 2.6-顺序表的合并(元素赋值法)
顺序表的合并(元素赋值法)对于”顺序表的合并“,则从算法2.2可直接写出形式上极为相似的算法2.7.显然,算法2.7的操作为”元素赋值法“。算法的时间复杂度为(A.len+B.len)。实现后加上了备注,代码条理还算清晰就拿出来分享一下。代码:#include/ZJJ数据据结构-线性表2.6using namespace std;typedef int ElemType;#define List_Init_Size 5//线性表初始长度#define LISTINCREMENT 5//线性表
2021-07-28 16:14:34 192
原创 2.5-顺序线性表的查找操作
顺序线性表的查找操作线性表的查找操作:线性表l查找第一个与元素e满足compare()元素的位置。若在,返回其在l中的次序。若不存在则输出不存在 。 int locateelem_sq(sqlist *l,elemtype e,status (*compare)(elemtype, elemtype))第一步设i=1,从线性表第一个位置开始查找。第二步进入循环,判断当前位置的值是否与e相等,并且是否循环到列表最后一个元素。如果未循环到尾部并且值还不相等,则继续循环,寻找符合条件元素的位置。第三
2021-07-27 17:53:48 450
原创 2.3-2.4(包含2.2)-线性表的插入与删除
顺序表的插入与删除题目要求:设计程序建立一个顺序表,要求从键盘输入整数,并完成添加插入和删除元素功能,并将该顺序表的元素从屏幕显示出来。使用malloc和realloc函数动态分配内存地址。参考着《数据结构(C语言版)》(清华大学出版社)进行实现实现后加上了备注,代码条理还算清晰就拿出来分享一下。代码:#include<iostream>//ZJJ数据据结构-线性表2.2-2.3using namespace std;typedef int ElemType;#define
2021-07-27 15:49:28 207
原创 头插法建立单链表
头插法建立单链表头插法会使输入的数据插入到链表的表头,输出数据时的数据与读入的数据时相反的,如,以1 2 3 4 5 6 7 8 9建立链表,输出的结果是9 8 7 6 5 4 3 2 1 。第一个元素会始终在链表的尾部1.建立一个空表,此时头指针L指向头结点,L->Next=NULL,如图2.while的第一次循环,插入第一个结点,进行如下操作代码如下:#include<iostream>using namespace std;#define ElemType int
2021-04-20 10:42:25 9108 6
原创 线性表的应用举例(已知线性表,然后设计一个算法将所有偶数移动到所有奇数前面;最后在主函数中调用实现移动的算法的函数)
题目:已知线性表(a1,a2,a3,a4…an)按顺序储存,且每个元素都是互不相等的整数。设计算法,把所有偶数移动到所有奇数前面(要求时间最少,辅助空间最少),并且给出完整的程序。解体思路:先定义顺序表的类型,并根据题意将ElemType设为int型,然后设计一个算法move将所有偶数移动到奇数前面,最后在主函数里调用。#include<iostream>using namespace std;#define MAXSIZE 100typedef int ElemType;typed
2021-04-18 12:24:34 1917 1
原创 2.1-线性表的应用举例(设计一个算法将表A和表B的全部元素归并为一个按元素值递增有序的顺序表C)
题目:已知有俩个按元素值递增有序的顺序表La和Lc,设计一个算法将La和表Lb的全部元素归并为一个按元素值递增有序的顺序表Lc算法思路:先设C为空表,然后比较A和B中的数据元素,将A或B中较小的元素插入到C中。当其中一个顺序表的数据元素均已插入到C中时,另一顺序表中的剩余元素依次插入即可。#include<iostream>using namespace std;typedef int ElemType;#define MAXSIZE 100typedef struct { El
2021-04-18 11:03:30 1613
原创 单例模式
单例模式 是一种常用的软件设计模式 目的:确保某一个类只有一个实例存在如果希望在一个系统中 某个类只能出现一个实例的时候,那么这个单例对象就满足要求class DabateClass(object): def __new__(cls, *args, **kwargs): #cls._instance=cls.__new__(cls, *args, **kwargs) #容易造成一个深度递归,应该调用父类的new方法 if not hasat.
2021-02-25 18:09:51 97
原创 类与对象-封装-设计案例(点与圆的位置关系)
封装意义一: 在设计类的时候,属性和行为写在一起,表现事物语法: class 类名{ 访问权限: 属性 / 行为 };封装意义二:类在设计时,可以把属性和行为放在不同的权限下,加以控制访问权限有三种:public 公共权限protected 保护权限private 私有权限废话不多说,上代码#include<iostream>using namespace std;class point//点类{public: void setx(int x)//设置x坐标
2021-02-23 17:00:49 223
原创 决战紫荆之巅--------面向对象简单游戏例子
要理解对象的实例概念:import timeimport randomclass Role:#定义一个角色类 def __init__(self,name,hp): self.name=name self.hp=100 pass def tong(self,enemy): b=random.randint(5,16) if b==15: enemy.hp -= 20#敌人掉了20滴.
2021-02-22 14:34:00 215 2
原创 利用zip内置函数写书籍库(小型)
def printbookinfo(): book=[]#储存所有的图书信息 id=input("请输入编号,每个项以空格分割:")# bookname = input("请输入书名,每个项以空格分割:") bookpos = input("请输入地址,每个项以空格分割:") idlist = id.split(" ") namelist =bookname.split(" ") poslist =bookpos.split(" ") book
2021-02-20 14:36:20 114
原创 文件的查找(递归函数)
递归案例 模拟实现 树形结构的遍历import os#引入文件操作模块def findFile(file_Path): listRs=os.listdir(file_Path)#得到该路径下所有的文件夹 for fileItem in listRs: full_path=os.path.join(file_Path,fileItem)#获取完整的文件路径 if os.path.isdir(full_path):#判断是否是文件夹
2021-02-19 19:53:21 205 1
原创 通讯录管理系统
1. 系统需求2. 创建项目创建新项目添加文件3. 菜单功能封装函数显示该界面 如void show()在main函数中调用封装好的函数4. 退出功能功能描述:退出通讯录思路:根据用户的不同选择,进入不同的功能,可以选择switch分支,将整个架构进行搭建当用户选择0时候,执行退出,选择其他先不做操作,也不会退出程序5. 添加联系人实现添加联系人功能,联系人上限为1000人,联系人信息包括(姓名、性别、年龄、联系电话、家庭住址)添加联系人实现步骤:设计联系人结构体设计通讯录
2021-02-19 17:50:02 296
原创 结构体排序案例
#include<iostream>using namespace std;#include<string>struct hero{ string name; int age; string sex;};void paixu(struct hero a[], int len){ for (int i = 0;i < len - 1;i++)//对每一对相邻元素做比较的工作,持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较,所以共需(元.
2021-02-18 19:30:36 125
原创 结构体老师套学生案例
这道题比较有意思,考察的比较完全,大部分知识点全都考到了,我给大家演示一下:#include <iostream>using namespace std;#include<string>#include<ctime>struct student{//学生结构体定义 string sname;//学生姓名 int score;//学生成绩};struct Teacher{//老师结构体定义 string tname;//老师名字 struct s.
2021-02-17 16:11:12 151 2
原创 编写函数swap实现两个数据的互换,形参分别指针和引用
学会区分指针,与引用的区别指针:#include<iostream>using namespace std;void swap(int *a, int *b)//参数是俩个指针变量{ int temper; temper = *a;//把a指向的值进行赋值 *a = *b; *b = temper; cout << *a << " " << *b;}int main(){ int a = 3, b = 5; swap(&a
2021-02-16 17:52:37 7151
原创 黑箱模型
黑箱模型(Black box)或称经验模型,指一些其内部规律还很少为人们所知的现象。如生命科学、社会科学等方面的问题。但由于因素众多、关系复杂,也可简化为灰箱模型来研究。黑箱模型:该模型是环境预测工作中应用较多的一类模型,它是根据输入—输出关系建立起来的,反映了有关因素间的一种笼统的直接因果关系。用于环境预测的黑箱模型,只涉及到开发活动的性质、强度与其环境后果之间的因果关系。如果未来的变化超出一定的范围,用这类模型的可靠性明显下降。黑箱模型本身不能表述过程。若能得到较多符合实际要求的数据时,应用黑箱模型进
2021-02-14 13:45:41 6149 4
原创 指针配合数组函数简单案例
指针配合数组函数简单案例案例描述:封装一个函数,利用冒泡排序,实现对整形函数的升序排列。例如数组arr[7] = { 2,4,65,79,9,7,8 }1.先创建数组2.创建函数,实现冒泡排序3.打印排序后的函数ps:数组的值传递实际上是数组会变为指针,函数接受的数组的首地址。话不多说,代码:#include<iostream>using namespace std;//冒泡排序函数void paixu(int *arr, int len)//实参是arr相当于&a
2021-02-09 18:58:05 209
原创 函数定义(对函数定义的使用)函数调用
函数调用对于函数调用,首先我们一定先要理解函数定义函数定义1.返回值类型:一个函数可以返回一个值,在函数定义中2.函数名:给函数起个名称3.函数体语句:花括号内的代码,函数内需要执行的语句4.return 表达式:和返回值类型挂钩,返回相应的数据语法:返回值类型 函数名 (参数列表){函数体语句return表达式}**例如我们来写一个加法函数**实现一个加法函数,功能是,传入俩个整形数据,计算数据相加的结果,并且返回1.返回值类型 int2.函数名
2021-02-09 14:42:47 705
原创 猜年龄小游戏
题目要求:代码:import randomprint("猜年龄小游戏")a = 0while a >= 0: computer = random.randint(1, 101) age = input("输入你猜测的年龄: ") if age == computer: print("回答正确,游戏结束") break pass else: a+=1 if a%3!=0:
2021-02-08 14:45:16 307
原创 冒泡排序
冒泡排序冒泡排序算法的原理如下:比较相邻的元素。如果第一个比第二个大,就交换他们两个。对每一对相邻元素做同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的数。针对所有的元素重复以上的步骤,除了最后一个。持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。代码示例:#include<iostream>using namespace std;int main(){ int arr[8] = { 9,5,6,1,7,8,0,3 };/
2021-02-07 12:47:17 122
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人