第1题
/*第二周顺序表作业: 请先阅读main()函数,了解程序功能,然后实现如下函数,并整个程序调试成功。 int ListInsert_sq(SqList &L, int i, ElemType e); int ListDeleteByIndex_sq(SqList &L, int i, ElemType &e); int ListDeleteByValue_sq(SqList &L, ElemType e); void ListTraverse(SqList L); */ //程序中多处用到了C++中的引用参数传递,请使用C++编译器 #include <stdio.h> #include <stdlib.h> #define MAXSIZE 100 typedef int ElemType; typedef struct { ElemType elem[MAXSIZE+1]; //约定:从elem[1]开始存储元素,elem[0]放弃不用,这样元素在线性表中的位序,与数组下标一致 int length; } SqList; //返回顺序表L中第1个与e相等的数据元素位序 int LocatElem_sq(SqList &L, ElemType e); //在第k个元素前插入元素x,若操作成功返回1, 若操作失败(如k非法、数组空间已满),则返回0 int ListInsert_sq(SqList &L, int k, ElemType e); //按指定位置删除元素:删除线性表L中第k个元素,用e返回其值,L长度减1。若k非法,则返回0,否则返回1 int ListDeleteByIndex_sq(SqList &L, int k, ElemType &e); //按值删除元素:在顺序表L中删除第一个值为e的元素。若删除成功返回1,若e不存在,则返回0 int ListDeleteByValue_sq(SqList &L, ElemType e); //遍历顺序表,输出所有元素 void ListTraverse(SqList L); int main() { SqList L; //顺序表 ElemType e; //存储一个元素值 int i, index; int slt; //存储用户的选择 printf("输入n和n个整数:"); scanf("%d", &L.length); for(i = 1; i <= l.length; i++) 下标从1开始 scanf("%d", &l.elem[i]); while(1) { printf("1.按值查找元素\n"); printf("2.按指定序号删除元素\n"); printf("3.按指定值删除元素\n"); printf("4.在指定位置插入指定元素\n"); printf("5.输出所有元素\n"); printf("0.退出\n"); printf("请输入你的选择:\n"); &slt); if( slt="=" 0) break; switch(slt) case 1: printf("输入待查找元素:"); &e); index="LocatElem_sq(L," e); locatelem()将返回顺序表l中第1个与e相等的元素下标 if(index> 0) printf("找到,下标为%d\n", index); else printf("找不到\n"); break; case 2: //按指定位置删除元素:读入一个序号i,删除线性表L中第i个元素,用e返回其值,L长度减1 printf("请输入待删除元素的序号i:"); scanf("%d", &i); if( ListDeleteByIndex_sq(L, i, e)) { printf("删除成功,被删除的元素是%d\n", e); printf("剩余元素为:\n"); ListTraverse(L); //遍历顺序表,输出所有元素 } else printf("删除失败\n"); break; case 3: //按值删除元素:读入一个整数e,在顺序表L中删除第一个值为e的元素,删除成功返回1,若e不存在,则返回0 printf("请输入待删除元素的值e:"); scanf("%d", &e); if( ListDeleteByValue_sq(L, e)) { printf("删除成功\n"); printf("剩余元素为:\n"); ListTraverse(L); //遍历顺序表,输出所有元素 } else printf("删除失败\n"); break; case 4: //在指定位置上插入新元素:读入一个整数e,和一个插入位置i,在线性表L中第i个元素之前插入新元素e, L长度加1 printf("请输入待插入元素:"); scanf("%d", &e); printf("请输入新元素位置序号:"); scanf("%d", &i); if( ListInsert_sq(L, i, e)) { printf("操作成功,更新后的序列如下:\n"); ListTraverse(L); //遍历顺序表,输出所有元素 } else printf("操作失败\n"); break; case 5: ListTraverse(L); //遍历顺序表,输出所有元素 break; } //结束switch }//结束while return 0; } //返回顺序表L中第1个与e相等的数据元素位序 int LocatElem_sq(SqList &L, ElemType e) { int i; for(i = 1; i <= l.length; i++) 下标从1开始 if(e="=" l.elem[i]) 若找到,返回下标1~l.length return i; 0; 若查找失败,返回0 }>
第2题
实验一 线性表一、实验目的 1. 了解线性表的逻辑结构特性,以及这种特性在计算机内的两种存储结构。 2. 重点是线性表的基本操作在两种存储结构上的实现;其中以链表的操作为侧重点;并进一步学习结构化的程序设计方法。 3. 掌握使用 C++面向对象的程序设计技术,设计数据结构源程序的方法。二、实验内容 1. 线性表的顺序存储表示(结构)及实现。 阅读下列程序请注意几个问题。 (1)关于线性表的顺序存储结构的本质是:在逻辑上相邻的两个数据元素ai-1, ai,在存储地址中也是相邻的,既地址连续。顺序存储结构也称“向量(vector)”。在下列类设计中,采用静态一维数组elem[]表示向量,同时用length表示线性表长度。 ElemType elem[MAXSIZE]; int length; (2)在上机实验时,需要将数据结构的类定义(包括成员函数的定义)的程序代码,写入源程序。同时用户必须自己编写一段主函数main(),在主函数中创建声明类的具体对象,通过这些对象调用类的公有函数。以便将一个典型数据结构类运用到实际问题中去。 l 源称序结构: 见本资料的第1页。 l 数据结构类定义(包括成员函数的定义)的程序代码 对于小型程序,这部分代码可以直接放入源称序之中,如上图所示。 对于复杂较大的程序,这部分代码可以生成一个头文件(例如Sqlistc.h)与源程序文件存储在同一个文件夹中。再在源程序之中写入一个语句,如下: #include “Sqlistc.h”; l 主函数 在学生没有学习可视化图形界面之前,建议在主函数中简单设计一个“菜单”(do-while循环内嵌套一个 switch结构)。随着学习的深入,应该学会熟练使用“菜单”技术,这样会明显提高编程和运行效率。一个主函数一般样式如下: int main( ) { //声明程序所需要的一般变量 int i,k; ElemType e,x; //声明和创建类对象,这个类往往是典型数据结构类 Sqlist as; System.out.print("\n ) 线性表顺序存储结构演示"; Scanner s = new Scanner(System.in); do{ //显示菜单内容 System.out.print("\n\n" ) ; System.out.print("\n\n 1. 初步建立一个线性表 " ) ; System.out.print("\n\n 2. 插入一个数据元素" ) ; System.out.print("\n\n 3. 删除一个元素,返回其值 " ) ; System.out.print("\n\n 4. 结束程序" ) ; System.out.print("\n********************************" ) ; System.out.print("\n请输入你的选择(1,2,3,4)" ) ; Int n = s.nextInt(); //接收用户的选择 //根据k值,转向对应的case 分支程序段执行 switch(n) { case 1:{ as.SetData(); as.PrintOut(); }break; case 2:{ System.out.print("\n\n 插入的位置,数据 i,e=?"); Int i = s.nextInt(); Int e = s.nextInt(); as.Insert(i,e); as.PrintOut(); }break; case 3:{ System.out.print("\n 删除第几个元i=?"); Int i = s.nextInt(); x=as.Delet(i); System.out.print(" 元素数值= "); as.PrintOut(); }break; default:break; } //switch }while(k>=1&&k<4); system.out.print("\n 再见!"); 按任意键,返回。"); _getch(); return 0; } ----------------------------------------------->
第3题
利用QQ群里的SQL代码,见文件xueji17.txt,创建示例数据库xueji17,再创建其中的两个数据表。 1. 学生信息表,表名为student,含有字段: ID (顺序号), sname(姓名), sno (学号), ssex(性别), sage (年龄),sdept(所属系部) ,saddress (地址), semail (电子邮件). 2. 成绩表,表名为cs,含有字段: studentid (学号),courseid (课程号) ,grade (成绩). 在数据库xueji17中完成以下题目: (1)在学生表student中添加新学生,信息如下表 sno sname saddress 3003 Green Finance (2)添加成绩表cs中新信息: studentid courseid grade 3003 002121 3002 009876 93 1002 030437 42 (3)填入学生表中的下列数据 sno,sname,ssex,sage,sdept '95001','洛燕妮','女',20,'信息系' '95002','欧阳炎','男',19,'计算机系' '95003','何东升','男',21,'美术系' '95004','刘晨','男',18,'计算机系' '95005','沙明华','女',21,'美术系' '95006','欧阳宝宝','男',19,'美术系' (4)填入成绩表中的下列数据 studentid,courseid,grade '95001', 'kl02',98 '95002', '9hu2',50 '95004', '9sh02',70 '95003', '95sh2',95 '95005', '95sh2',40 '95006', '95sh2',77 '95001', '95sh2',80 '95002', '95sh2',58 '95006', '96sh2',700
第6题
编程二 QQ群名片设计(单链表) 一、 编程内容 采用文本文件“mingpian.txt”存储下列群名片数据: 昵称 QQ号码 性别 年龄 生日 阿厘子 13762588801 女 24 11月12日 Annnn 84008178190 男 300 6月2日 安适一隅 380929382 男 1200 12月9日 不羁的风 3050225418 男 5 8月30日 设计并编程实现一个应用单链表存储结构的群名片管理系统。定义适当数据类型,设计并编写完成下列8项基本功能的C语言程序: 1) 初始化群名片initlinklist(); 2) 将文本文件内容读入数组 CreateArray(); 3) 从数组中读入数据建立群名片单链表(用头插法)InitSLink(); 4) 列表输出群名片的内容 DispSLink(); 5) 在最后一条记录后插入新记录(用尾插法)AttachSLink(); 6) 删除给定昵称的记录DeleteLink(); 7) 在第i个元素位置插入群成员e的记录InsertList(); 8) 按昵称、QQ号码查询群名片 NamesearchLink(); 9) 销毁群名片 DestroySLink(). 拓展功能(选做): 10)按姓名的升序排序群名片 AscendSLink; 11)按QQ号码顺序插入新记录 ,并保持记录升序InsertSLink(); 12)显示当前群名片中共有多少联系人Lengthlist(); 二、 程序要求 预习相关内容,提前完成设计和编写(并调试)源程序代码,在实验上机课时内主要解决遇到的问题、完成系统的最终调试,现场检验,整理和提交实验报告。 三、 结果提交 请同学们将程序源代码复制到TXT或word文档中,并将程序运行结果截屏并粘贴到源代码所在的文件后面,然后作为附件上传。
第7题
这个算法实现的思路是:定义两个等长度的顺序表,将LB初始化为空表,然后依次从LA中取数据元素,插入到顺序表LB对应的位置上。
为了保护您的账号安全,请在“上学吧”公众号进行验证,点击“官网服务”-“账号验证”后输入验证码“”完成验证,验证成功后方可继续查看答案!