2017西电电院软件技术基础上机大作业答案
软件技术基础习题答案

操作系统1.如何理解虚拟机的概念?答:虚拟机就是在裸机上扩展一层软件,将硬件实现细节隐藏起来,使用户能够更方便、更灵活使用的计算机。
2.什么是多道程序设计,它的主要优点是什么?答:多道程序设计就是允许多个程序同时进入内存并运行。
主要优点:提高资源利用率,从而提高了系统的吞吐量。
3.试述分时系统与实时系统,并比较它们的区别。
答:分时系统是指能够允许多个用户同时使用一台计算机的系统。
实时系统是指能够及时响应随机发生的外部事件,并在严格的时间范围内完成对该事件处理的系统。
实时系统对系统响应速度要求更高,可靠性要求更高。
(或者说明分时系统与实时系统各自特点)4.一般从哪几方面对操作系统的性能进行评价?1)可靠性2)方便性3)效率4)可维护性5)可移植性5.试说出几种你所熟悉的操作系统名称,并说明其特征。
答:Linux特征:支持多用户、多任务,具有良好的用户界面,设备独立性,系统安全性能高,良好的可移植性。
Windows特征:支持多用户、多任务,具有友好的图形用户界面,强大的内存管理功能,可靠性高,操作简单。
6.根据你试用计算机系统的经验,说明操作系统的作用。
答:控制和管理计算机系统内各种硬件和软件资源、合理有效地组织计算机系统的工作,为用户提供一个使用方便可扩展的工作环境,从而起到连接计算机和用户的接口作用。
7.如何理解网络操作系统的主要功能?答:用于管理网络通信和共享资源,协调各主机上任务的运行,并向用户提供统一的、有效的网络接口,包括网络管理、通信、资源共享、系统安全和多种网络应用服务。
8.如何理解进程的概念?进程与程序的区别是什么?进程与作业的联系和区别是什么?答:进程是一个可以并发执行的程序或程序段在一个数据集合上的执行过程,他是系统分配资源的基本单位。
区别:1)经常是一个动态的概念,是执行程序的动态过程,它因创建而产生,因调度而执行,因撤销而消亡。
而程序是一个静态的概念,是进程运行的静态文本。
《计算机软件技术基础》习题及参考答案

4.以下数据结构中不属于线性数据结构的是______。
A. 队列 B. 线性表 C . 二叉树 D. 栈
5.在计算机中,算法是指______。
A. 查询方法 B. 加工方法 C. 解题方案的准确而完整的描述 D. 排序方法
6.在下列选项中,哪个不是一个算法一般应该具有的基本特征______。
B. 随机存取的存储结构、顺序存取的存储结构
C. 随机存取的存储结构、随机存取的存储结构
D. 任意存取的存储结构、任意存取的存储结构
14.下列关于栈的描述中错误的是。
A.栈是先进后出的线性表B.栈只能顺序存储
C.栈具有记忆作用D.对栈的插入和删除操作中,不需要改变栈底指针
15.栈底至栈顶依次存放元素A、B、C、D,在第五个元素E入栈前,栈中元素可以出栈,则出栈序列可能是______。
A. 程序的规模 B. 程序的易读性 C. 程序的执行效率 D. 程序的可移植性
30.对建立良好的程序设计风格,下面描述正确的是______。
A. 程序应简单、清晰、可读性好 B. 符号名的命名要符合语法
C. 充分考虑程序的执行效率 D. 程序的注释可有可无
31.下面对对象概念描述错误的是______。
A. 任何对象都必须有继承性 B. 对象是属性和方法的封装体
C. 对象间的通讯靠消息传递 D. 操作是对象的动态性属性
32.在面向对象方法中,一个对象请求另一对象为其服务的方式是通过发送______。
A. 调用语句 B. 命令 C. 口令 D. 消息
33.面向对象的设计方法与传统的的面向过程的方法有本质不同,它的基本原理是______。
《计算机软件技术基础》参考答案A.doc

《计算机软件技术基础》参考答案A一、单项选择题(每空1分,共50分)1-5 CBCBD 6-10 ADDCB11-15 ACABB 16-20 BLJCI21-25 CCABC 26-30 BADAB31-35 BCDBA 36-40 DDCDA41-45 DDCAC 46-50 BBCAB评分标准:本题每空1分,多选、少选、错选均不得分。
二、本题10分(1) v != NULL或v(2) x > v->val 或x != v->val(3) p->next(4) u->next(5) head->next评分标准:本题10分,每空2分,在(3)-(5)中未写出next扣1分三、本题10分(1) A!=NULL && B!=NULL(2) A->data==B->data(3) B=B->next;(4) A!=NULL(5) last->next=NULL;评分标准:本题10分,每空2分,在(2)中未写出data扣1分,在(3)和(5)中未写出next扣1分四、本题10分解:(1) A、B、C三个进程之间存在互斥的制约关系。
因为打印机属于临界资源,必须一个进程使用完之后另一个进程才能使用。
(2)mutex:用于互斥的信号量,初值为1。
各进程的代码如下:进程A 进程B 进程C... … ...... … ...P(mutex) P(mutex) P(mutex)申请打印机申请打印机申请打印机使用打印机使用打印机使用打印机V(mutex) V(mutex) V(mutex)… … …评分标准:本题10分,(1)题3分,(2)题7分,其中给出信号量含义和初值1分,三个进程代码各2分五、本题10分解:FIFO淘汰算法:内存块为3时,缺页中断(或称缺页次数、页面故障)为9;内存块为4时,缺页中断为10。
LRU淘汰算法:内存块为3时,缺页中断为10评分标准:本题10分,FIFO淘汰算法两种情况各3分,LRU淘汰算法1分,要求有分析过程六、本题10分解:段式存储管理的地址转换过程为:(1)根据逻辑地址中的段号查段表的相应栏目;(2)根据段内地址<段长度,检查地址是否越界;(3)若不越界,则绝对地址=该段的主存起始地址+段内地址。
电子科技大学2017年计算机机考参考答案

1.操作系统是一种( C ) (A) 编译系统 (B) 操作规范 (C) 系统软件 (D) 应用软件 分值:2 完全正确 得分:22.在 Word 的默认状态下,不用打开“文件”对话框就能直接打开最近使用过的文档方法是( D ) (A) 选择“文件”菜单中的“打开”命令 (B) 工具栏上的“打开”按钮 (C) 快捷键 Ctrl+O (D) 选择“文件”菜单底部文件列表中文件 分值:2 完全正确 得分:23.在具有常规格式的单元中输入数值后,其显示方式是(B ) (A) 左对齐 (B) 右对齐 (C) 居中 (D) 随机 分值:2 完全正确 得分:24.在幻灯片切换中,可以设置幻灯片切换的( B ) (A) 在幻灯片切换中,可以设置幻灯片切换的( ) (B) 换片方式 (C) 强调效果 (D) 退出效果 分值:2 完全正确 得分:25.动态 RAM 的特点是( D ) (A) 工作中需要动态地改变访存地址(B) 工作中需要动态地改变存储单元内容 (C) 每隔一定时间需要刷新 (D) 每次读出后需要刷新 分值:2 答题错误 得分:06.启动 Excel 自动建立的工作薄文件中自动带有的电子工作表有( B ) (A) 2 个 (B) 3 个 (C) 1 个 (D) 4 个 分值:2 完全正确 得分:27.当向 Excel 工作薄文件中插入一张电子工作表时,表标签中的英文单词为( D ) (A) Book (B) List (C) Table (D) Sheet 分值:2 完全正确 得分:28.演示文稿中,超链接所链接的目标可以是( D ) (A) 幻灯片中的文本 (B) 幻灯片中的图拍案 (C) 幻灯片中的动画 (D) 同一演示文稿的某一张幻灯片 分值:2 完全正确 得分:29.在 PowerPoint 自定义动画中,可以设置( D) (A) 隐藏幻灯片 (B) 动作 (C) 超链接(D) 动画重复次数 分值:2 完全正确 得分:210.显示磁盘卷标的 DOS 命令是( D ) (A) TYPE (B) DIR (C) VER (D) VOL 分值:2 完全正确 得分:211.计算机内部用于处理数据和指令的编码是(B ) (A) 十进制 (B) 二进制 (C) 汉字编码 (D) ASCII 码 分值:2 完全正确 得分:212.计算机的存储系统一般指主存储器和( B ) (A) 寄存器 (B) 辅助存储器 (C) 累加器 (D) 鼠标器 分值:2 完全正确 得分:213.在 Windows 中,“回收站”是( C ) (A) 内存中的一块区域 (B) 高速缓存中的一块区域 (C) 硬盘中的特殊文件夹 (D) 软盘上的文件 分值:2完全正确 得分:214.PowerPoint 的页眉可以( D ) (A) 用作标题 (B) 将文本放置在每张幻灯片的顶端 (C) 将图片放置在每张幻灯片的顶端 (D) 将文本放置在讲义打印页的顶端 分值:2 完全正确 得分:215.时至今日,计算机仍采用程序内存或称存储程序原理,原理的提出者是( B ) (A) 比尔盖茨 (B) 冯诺依曼 (C) 莫尔 (D) 科得 分值:2 完全正确 得分:216.计算机最主要的工作特点是( D ) (A) 有记忆能力 (B) 可靠性与可用性 (C) 高速度与高精度 (D) 存储程序与自动控制 分值:2 完全正确 得分:217.用来表示计算机辅助设计的英文缩写是( C) (A) CAM (B) CAT (C) CAD (D) CAI 分值:2 完全正确 得分:218.在 Word 编辑状态下,若要进行字体效果的是指,首先应该打开( D )下拉菜单。
《计算机软件技术基础》试题答案

《计算机软件技术基础》试题答案一、选择题(每题5分,共30分)1. 下列关于软件工程的描述,错误的是(D)。
A. 软件工程是计算机科学的一个分支B. 软件工程的目标是提高软件质量和生产率C. 软件工程包括软件开发、维护和管理等方面D. 软件工程只关注大型软件的开发2. 下列哪种编程范式主要用于描述程序逻辑和数据的结构?(B)A. 面向过程编程B. 面向对象编程C. 函数式编程D. 逻辑编程3. 下列关于软件测试的描述,错误的是(C)。
A. 软件测试是软件开发过程中的重要环节B. 软件测试的目的是发现和修正软件中的错误C. 软件测试无需考虑软件的性能和稳定性D. 软件测试分为单元测试、集成测试和系统测试等阶段4. 下列关于软件维护的描述,正确的是(B)。
A. 软件维护是指对软件进行升级和优化B. 软件维护包括纠正软件错误、改进软件性能和增加新功能等C. 软件维护不需要考虑软件的可维护性D. 软件维护仅限于软件开发完成后5. 下列关于软件项目管理工具的描述,错误的是(D)。
A. 软件项目管理工具可以协助项目经理进行项目规划B. 软件项目管理工具可以协助项目经理进行项目监控C. 软件项目管理工具可以协助项目经理进行项目沟通D. 软件项目管理工具无法协助项目经理进行项目风险管理二、填空题(每题5分,共30分)1. 软件生命周期可以分为______、______、______、______和______五个阶段。
答案:需求分析、设计、实现、测试、维护2. 在面向对象编程中,一个对象通常包括______和______两部分。
答案:属性、方法3. 软件测试的目的是______、______和______。
答案:发现错误、修正错误、提高软件质量4. 软件维护的类型包括______、______、______和______。
答案:纠错性维护、适应性维护、完善性维护、预防性维护5. 软件项目管理工具主要包括______、______、______和______。
西电—软件大作业

软件技术基础大作业电子工程学院2016.121、//单链表逆置void invert(linklist*head) {linklist*p, *q, *r;//p指向前一个结点,q指向p后的结点,r用于保存q指针域的值p = head->next; //p指向第一个结点q = head->next->next; //q指向第二个结点head->next->next = NULL;while (q != NULL) {r = q->next;//保存q指针域的值,接下来会将此值赋予pq->next = p; //修改q的指针域,使其指向p所指结点,以达到逆置的目的p = q;//p 后移q = r;//q后移}head->next = p;}分析:2、//按字母、数字、其它字符分解单链表void resolve(linklist*head, linklist*letter, linklist*digit, linklist*other) { linklist *p;while (head->next != NULL) {p = head->next; //p指向第一个节点head->next = head->next->next; //缩短循环链表if ((p->data >= 'A'&&p->data <= 'Z') || (p->data >= 'a'&&p->data <= 'z')) insert(letter, p);elseif (p->data >= '0'&&p->data <= '9')insert(digit, p);else insert(other, p); //判断字母、数字和其它字符}}分析:3、//判字符串是否中心对称int symmetry(linklist*head, stack*s) {int l = length(head);int n = l / 2;int x;linklist*p = head->next;for (int i = 1; i <= n; i++) {push(s, p->data);//把单链表的前一半元素压入堆栈p = p->next;}if (l % 2 == 1) p = p->next;//当链表长度为奇数时while (p->next != NULL) {x = pop(s);if (x == p->data)p = p->next;elsereturn 0;}return 1;}分析:4、//入队void enqueue(qu *sq, datatype x) {for (int i = 0; i < m; i++) {sq->sequ[i] = x;}}//出队datatype *dequeue(qu *sq){datatype *temp;if (sq->quelen == 0){printf("queue is empty\n"); return NULL;}else {temp = (datatype*)malloc(sizeof(datatype));sq->quelen--;*temp = sq->sequ[(sq->rear - sq->quelen + m) % m];return (temp);}}分析:5、//顺序串的朴素模式匹配int Index(seqstring*S, seqstring*subS) {int i = 1, j = 1; //位序从1开始while (i <= S->len&&j <= subS->len)if (S->str[i - 1] == subS->str[j - 1]){i++; j++;} //继续比较后面的字符else{i = i - j + 2; j = 1;} //本趟不匹配,设置下一趟匹配的起始位序if (j >subS->len) return(i - subS->len); //匹配成功elsereturn(-1); //匹配不成功}分析:6、//添加删除子串算法void strDelete(seqstring*S, int pos, int len) {char temp[maxsize];if (pos>= 1 &&len<= S->length - len + 1) {strncpy_s(temp, S->str, pos - 1);//strncpy_s与strncpy具有相同的功能,用于将源字符串复制到目的字符串strcpy_s(temp + pos - 1,maxsize,S->str + pos + len - 1);//strcpy_s与strcpy具有相同的功能strcpy_s(S->str,maxsize, temp);S->length = S->length - len;}}分析:7、//希尔排序void shellsort(rectype r[], int d[]){int i, j, k, h;rectype temp;int maxint = 32767;for (i = 0; i<D1; i++)r[i].key = -maxint;//设置T个监视哨k = 0;do {h = d[k];//取一趟的增量for (i = h + D1; i<N + D1; i++){temp =r[i];j = i - h;while (temp.key<r[j].key){r[j + h] =r[j];j = j - h;}r[j + h] = temp;}//组内直接插入法排序print(r, N);//输出一趟的排序结果k++;} while (h != 1);}分析:8、//折半查找索引表,块内顺序查找int blksearch(record r[], index idx[], keytype k, int n) {int i, low = 0, high = n - 1, mid, bh, find = 0;//折半查找索引表while (low <= high && !find){mid = (low + high) / 2;if (k<idx[mid].key)high = mid - 1;elseif (k>idx[mid].key)low = mid + 1;else{high = mid - 1;find = 1;}}if (low<n){i = idx[low].low;//块的起始地址bh = idx[low].high;//块的终止地址}//块内顺序查找while (i<bh&&r[i].key != k)i++;if (r[i].key != k)i = -1;return i;}分析:9、//双向起泡排序void dbubblesort(sequenlist r[], int n){int i = 1, j, noswap = 1;sequenlist temp;while (noswap) {noswap = 0;for (j = n - i + 1; j >= i + 1; j--)if (r[j].key<r[j - 1].key){noswap = 1;temp =r[j];r[j] =r[j - 1];r[j - 1] = temp;}for (j = i + 1; j <= n - i; j++)if (r[j].key>r[j + 1].key){noswap = 1;temp =r[j];r[j] =r[j + 1];r[j + 1] = temp;}for (int k = 1; k <= n; k++)printf("%5d", r[k].key);printf("\n");i++;}}分析:10。
《计算机软件技术基础》试题及答案

《计算机软件技术基础》试题1.线性表的链式储存结构与次序储存结构对比优点是CD 。
A.所有的操作算法实现简单B.便于随机存取C.便于插入和删除D.便于利用零落的储存器空间2.线性表是拥有n个 C 的有限序列。
A.表元素B.字符C.数据元素D.数据项E.信息项3.若长度为n的线性表采纳次序储存结构, 在其第I个地点插入一个新元素的算法的时间复杂度为 C 。
(1≤I≤n+1)A.O(0)B.O(1)C.O(n)D.O(n2)4.设A是一个线性表(a1,a2,…,an), 采纳次序储存结构, 则在等概率的前提下, 均匀每插入一个元素需要挪动的元素个数为 B , 均匀每删除一个元素需要挪动的元素个数为A ;若元素插在ai与ai+1之间(0≤I≤n-1)的概率为, 则均匀每插入一个元素所要挪动的元素个数为 C ;A. B.C. D.5.以下函数中, 按它们在时的无量大阶数, 最大的是 D 。
A.lognB.nlognC.2n/2D.n!6.将以下图所示的s所指结点加到p所指的结点以后, 其语句应为: D 。
A.s->next=p+1.p->next=s;B.(*p).next=s.(*s).next=(*p).next;C.s->next=p->next.p->next=s->next;D.s->next=p->next.p->next=s;7.将两个各有n个元素的有序表合并为一个有序表时, 其最少的比较次数是A 。
A.nB.2n-1C.n-1D.2n8.下边的程序段是合并两个无头结点链表(ha和hb)为一个无头结点链表ha的过程, 作为参数的两个链表都是按结点的data域由大到小链接的。
合并后新链表的结点仍按此方式链接。
请填写下述空框, 使程序能正确运转。
#define NULL 0typedef struct node{int data;struct node *next;}node, linklisttype;void combine(linklisttype *ha, linklisttype *hb){linklisttype *h, *p;h = (linklisttype *)malloc(sizeof(linklisttype));h->next = NULL;p = h;while(ha != NULL && hb != NULL)if(ha->data>=hb->data){ /*较大的元素先插入*/p->next = (1) ;p = (2) ;(3) ;}else{p->next = (4) ;p = (5) ;(6) ;}if(ha==NULL) (7) ;if(hb==NULL) (8) ;ha = h->next;free(h);}参照答案: (1) ha (2) p->next (3) ha=ha->next(4) hb (5) p->next (6) hb=hb->next(7) p->next=hb (8) p->next=ha9.假如表A中所有元素(a1,a2,…,an)与表B的一个次序子表(bk,bk+1,…bk+n-1)完好同样(即a1=bk,a2=bk+1,…an=bk+n-1), 则称表A包含在表B中。
西电软件技术基础大作业

西电软件技术基础大作业现有若干学生的学籍档案信息,要求编写一个应用软件实现对其进行日常管理,以实现学生档案信息的插入和删除,并能根据学号查询.#include<stdio.h>#include<stdlib.h>#include<string>typedef struct student{char ID[10];char name[10];char sex[3];int age;char addr[30];struct student *next;}stu;void Input(stu *&head){stu *temp,*current;temp=(stu *)malloc(sizeof(stu));printf("输入学生信息:\n");printf("学号\t姓名\t性别\t年龄\t地址\t\n");fflush(stdin);scanf("%s%s%s%d%s",temp->ID,temp->name,temp->sex,&temp->age,temp->addr);temp->next=NULL;if(head==NULL){head=(stu *)malloc(sizeof(stu));head->next=temp;}else{current=head->next;while(current->next)current=current->next;current->next=temp;}printf("添加成功\n");system("pause");}void FindByID(stu *&head){if(head==NULL){printf("数据为空\n");system("pause");return ;}else{stu *current =head->next;bool flag=0;char a[10];printf("输入要查询的学号:\n");fflush(stdin);scanf("%s",a);do{if(strcmp(current->ID,a)==0){flag=1;break;}current=current->next;}while(current!=NULL);if(flag){printf("学号:%s 姓名:%s 性别:%s 年龄:%d 地址:%s\n",current->ID,current->name,current->sex,current->age,current->addr);system("pause");}else{printf("没有找到\n");system("pause");}}}void FindByName(stu *&head){if(head==NULL){printf("数据为空\n");system("pause");return ;}else{stu *current =head->next;bool flag=0;char a[10];printf("输入要查询的姓名:\n");fflush(stdin);scanf("%s",a);do{if(strcmp(current->name,a)==0){flag=1;break;}current=current->next;}while(current!=NULL);if(flag){printf("学号:%s 姓名:%s 性别:%s 年龄:%d 地址:%s\n",current->ID,current->name,current->sex,current->age,current->addr);system("pause");}else{printf("没有找到\n");system("pause");}}}void Delete(stu *&head){if(head==NULL){printf("数据为空\n");system("pause");return ;}else{ stu *current =head->next;stu *prev=NULL;char a[10];printf("输入要删除的学号:\n");fflush(stdin);scanf("%s",a);while(current!=NULL){if(strcmp(current->ID,a)==0)break;prev=current;current=current->next;}if(prev==NULL){head->next=current->next;free(current);}else{prev->next=current->next;free(current);}printf("删除成功\n");system("pause");}}void Show(stu *&head){stu *current =head->next;if(current==NULL){printf("数据为空\n");system("pause");return ;}printf("学号\t姓名\t性别\t年龄\t地址\t\n");while(current!=NULL){printf("%s\t%s\t%s\t%d\t%s\n",current->ID,current->name,current->sex,current->age,current->ad dr);current=current->next;}system("pause");}void Modify(stu *&head){if(head==NULL){printf("数据为空\n");system("pause");return ;}bool flag=0;char a[10];printf("输入要查询的学号:\n");fflush(stdin);scanf("%s",a);stu *current=head->next;do{if(strcmp(current->ID,a)==0){flag=1;break;}current=current->next;}while(current!=NULL);if(flag){printf("学号:%s 姓名:%s 性别:%s 年龄:%d 地址:%s\n",current->ID,current->name,current->sex,current->age,current->addr);printf("请重新输入该学生信息:\n");printf("学号\t姓名\t性别\t年龄\t地址\t\n");scanf("%s%s%s%d%s",current->ID,current->name,current->sex,current->age,current->addr); printf("修改成功\n");printf("pause");}else{printf("没有找到\n");system("pause");}}void Print(){system("cls");printf(" 请选择功能(按0退出)\n");printf(" 1------添加学生\n");printf(" 2------通过学号查询学生\n");printf(" 3------通过姓名查询学生\n");printf(" 4------删除学生\n");printf(" 5------修改学生\n");printf(" 6------显示所有学生\n");}int main(){char ch;stu *head=NULL;do{Print();fflush(stdin);ch=getchar();//system("cls");switch(ch){case '1':Input(head);break;case '2':FindByID(head);break; case '3':FindByName(head);break; case '4':Delete(head);break;case '5':Modify(head);break; case '6':Show(head);break;}}while(ch!='0');}。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
1.若在矩阵Am×n中存在一个元素A[i][j],其满足A[i][j]是第i行元素中最小值,且又是第j列元素中最大值,则称此元素为该矩阵的一个马鞍点。用二维数组存储矩阵Am×n,设计算法求出矩阵中所有马鞍点。(文件夹:找马鞍点)
2.A和B是两个n×n阶的对称矩阵,以行为主序输入对称矩阵的下三角元素,压缩存储存入一维数组A和B,编写一个算法计算对称矩阵A和B的乘积,结果存入二维数组C。(文件夹:对称矩阵相乘)
2.采用二叉链表结构存储一棵二叉树,编写一个算法统计该二叉树中结点总数及叶子结点总数。(文件夹:统计二叉树结点)
实验六图
一、实验目的
1.熟悉图的邻接矩阵和邻接表的存储结构
2.熟悉图的邻接矩阵和邻接表的建立算法
实验五树
一、实验目的
1.熟悉二叉树的链式存储结构
2.掌握二叉树的建立、深度优先递归遍历等算法
3.能够利用遍历算法实现一些应用
二、实验内容
1.已知二叉树采用二叉链表存储结构,如果左、右子树非空,且左子树根结点大于右子树根结点,则交换根结点的左、右子树。即按要求交换二叉树及子树的左、右子树。(文件夹:交换左右子树)
二、实验内容
1.串采用顺序存储结构,编写朴素模式匹配算法,查找在串中是否存在给定的子串。(文件夹:模式匹配)
思路6:朴素模式匹配对于字串和子串逐个字符进行匹配,在某一位置如果该字符与子串中的字符不相等时,那么进行回溯,子串到开始位置,字串到下一位置重新开始遍历,直到遍历结束,判断在该字串中是否存在给定的子串。
思路1:对于顺序表,使用一个结构体,结构体中包含一个数组,来储存顺序表里的信息,同时还有一个表示位置的变量来储存该顺序表的当前位置,便于循环遍历,在交换的时候,其本质上只是使得该顺序表上的DATA实现逆序,在顺序表中等于对于数组的内容实现交换逆序。
思路2:对于线性表,使用结构体,包含data,用来储存线性表里该节点的信息,同时还有一个nest指针用于指向下一个节点,在计算机内部根据地址指向实现一个链表结构,当实现该线性表逆序的时候,我们先对该线性表进行循环遍历得到该线性表中节点的个数,然后从头开始遍历把线性表中每个节点的data都存储在一个数组里面,对于数组中的元素实现逆序交换,得到一个逆序后的数组然后循环遍历线性表对于线性表的每一个元素逐个重新赋值,实现线性表的逆置。
实验二栈和队列
一、实验目的
1.熟悉栈和队列的顺序和链式存储结构
2.掌握栈和队列的基本运算
3.能够利用栈和队列的基本运算完成栈和队列应用的运算
二、实验内容
1.设单链表中存放有n个字符,试编写算法,判断该字符串是否有中心对称的关系,例如xyzzyx是中心对称的字符串。(提示:将单链表中的一半字符先依次进栈,然后依次出栈与单链表中的另一半字符进行比较。)(文件夹:判字符串中心对称)
思路5:队列的入操作是从尾部,出操作仕从头部,当入队列时,用数组存放循环队列的元素,需要判断当对尾越过数组上界时,需要变成数组的下界,当出队列时,从队列头部开始,根据队尾部和队列长度得到队列的头部,同时考虑越过数组下界的问题,从而改变成数组的上界。
实验三串
一、实验目的
1.熟悉串的顺序存储结构
2.掌握串的基本运算及应用
3.能够利用线性表的基本运算完成线性表应用的运算
二、实验ห้องสมุดไป่ตู้容
1.设有一个线性表E={e1, e2,…, en-1, en},设计一个算法,将线性表逆置,即使元素排列次序颠倒过来,成为逆线性表E’={ en, en-1,…, e2, e1},要求逆线性表占用原线性表空间,并且用顺序表和单链表两种方法表示,分别用两个程序来完成。(文件夹:顺序表逆置、单链表逆置)
思路4:设置一个栈结果,将单链表中的元素逐个添加到栈中,入栈操作,栈有先进后出的特点,因此栈底元素对应链表的第一个元素,栈顶元素对应链表的最后一个元素,刚好是链表的逆置,不断的出栈得到当前的栈顶元素与链表对应的元素进行比较,如果有一俩个值不相等的话,那么就可以判断该字符串是否具有中心对称关系。
2.假设以数组sequ[m]存放循环队列的元素,同时设变量rear和quelen分别指示循环队列中队尾元素的位置和内含元素的个数。编写实现该循环队列的入队和出队操作的算法。提示:队空的条件:sq->quelen==0;队满的条件:sq->quelen==m。(文件夹:循环队列)
2.已知由不具有头结点的单链表表示的线性表中,含有三类字符的数据元素(字母、数字和其他字符),试编写算法构造三个以循环链表表示的线性表,使每个表中只含有同一类的字符,且利用原表中的结点空间,头结点可另辟空间。(文件夹:分解单链表)
思路3:根据每个对应的字符的值进行判断,如果该字符的值在“a”-“z”或者在“A”-“Z”之间的话,那么就插入字符循环链表中,如果在“0”-“9”之间,就插入到数字循环链表中,如果都不是,就插入到other循环链表中,对于单链表中的每一个节点逐个判断。
思路7:调用字符串函数在第i个字符删除,定义一个临时变量temp,先将S中的0至i-1字符全部复制到temp中,然后衔接i+m-1之后的字符串全部复制到temp中,最后将temp的值重新复制到S中。
实验四数组
一、实验目的
1.熟悉数组的结构
2.掌握矩阵的压缩存储
3.能够对数组和矩阵的压缩存储进行运算
二、实验内容
说明
每个实验题目含有一个main函数和一些函数,与实验题目相关的基本运算的函数定义和main函数定义的代码在附录以及对应的文件夹中给出,供上机实验参考使用。对于每个题目,只需要根据题目要求设计算法,补充函数定义,然后对程序进行编译、调试。
实验一线性表
一、实验目的
1.熟悉线性表的顺序和链式存储结构
2.掌握线性表的基本运算