河南科技大学计算机软件技术基础实验指导书及参考代码_第1页
河南科技大学计算机软件技术基础实验指导书及参考代码_第2页
河南科技大学计算机软件技术基础实验指导书及参考代码_第3页
河南科技大学计算机软件技术基础实验指导书及参考代码_第4页
河南科技大学计算机软件技术基础实验指导书及参考代码_第5页
已阅读5页,还剩15页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

目 录实验一单链表的运算 .2实验二 二叉树的建立和遍历 .5实验三 二叉排序树的建立和查找 .6实验四 windows 操作系统及应用 9实验五 数据库建立 .10实验六 数据库查询 .12附录 .132实验一单链表的运算一、 实验目的1掌握单链表的基本运算:建立、插入和删除2掌握运用 C 语言上机调试单链表的基本方法。二、 实验环境操作系统和 C 语言系统三、 预习要求了解单链表的建立、插入和删除算法,编写完整的程序。四、 实验内容设计算法,实现线性结构上的单链表的产生以及元素的查找、插入与删除。具体实现要求:(1)从键盘输入 n 个整数,以 0 作为结束标记,产生不带表头的单链表,并输入结点值。 (2)从键盘输入 1 个整数,在单链表中查找该结点的位置。若找到,则显示“找到了” ;否则显示“找不到” 。 (3)从键盘输入 2 个整数,一个表示欲插入的位置i,另一个表示欲插入的数值 x,将 x 插入在对应位置上,输出单链表所有结点值,观察输出结果。 (4)从键盘输入 1 个整数,表示欲删除结点的位置,输出单链表所有结点值,观察输出结果。五、 参考算法#include #include /*单链表的定义*/typedef int DataType; /*DataType 可以是任何相应的数据类型如 int, float 或 char*/typedef struct node /*结点类型定义*/ DataType data; /*结点的数据域*/struct node *next; /*结点的指针域*/ListNode;typedef ListNode *LinkList;void main() int i;DataType key,x;LinkList head;3ListNode *p;LinkList CreateList(void);void PrintList(LinkList head);LinkList LocateNode(LinkList head,DataType key);LinkList GetNode(LinkList head,int i);void InsertList(LinkList *head,DataType x,int i);void DeleteList(LinkList *head,int i);/ clrscr();head=CreateList(); /*建立单链表*/PrintList(head); /*打印单链表*/printf(“n 输入要查找的值: “);scanf(“%d“,p=LocateNode(head,key); /*单链表查找*/printf(“n 请输入欲插入元素的位置: “);scanf(“%d“,printf(“n 请输入欲插入的元素: “);scanf(“%d“,InsertList( /*单链表插入*/PrintList(head); /*打印单链表*/printf(“n 请输入欲删除结点的位置: “);scanf(“%d“,DeleteList( /*单链表删除*/PrintList(head); /*打印单链表*/*单链表的建立,从后向前生成 */LinkList CreateList(void)LinkList head,p;int x;head=NULL;4printf(“input some inteagers until 0!“);scanf(“%d“,while(x)p=(LinkList)malloc(sizeof(ListNode); /*以下三行:新建结点并初始化 */p-data=x;p-next=NULL;if(head=NULL) head=p;else p-next=head;head=p;scanf(“%d“,return (head);/*单链表的打印*/void PrintList(LinkList head)LinkList p;p=head;while(p!=NULL)printf(“%5d“,p-data);p=p-next;/*单链表的查找,输入一个整数,显示该结点的位置 */LinkList LocateNode(LinkList head,DataType key)/*在不带头结点的单链表 head 中查找其值为 key 的结点 */LinkList p;if(head=NULL)printf(“List is null!“);return (head);if(head-data=key)printf(“the wanted data is:%d“,head-data);return (head);5p=head;while(p-data!=key)if(p!=NULL)printf(“the wanted data is:%d“,p-data);else printf(“the wanted data is not found!“);return (p);/*单链表的查找 2,在不带头结点的单链表 head 中查找第 i 个结点*/LinkList GetNode(LinkList head,int i)LinkList p;int n=1;p=head;while(p!=NULL)return (p);/*单链表的插入*/void InsertList(LinkList *head,DataType x,int i)/*将值为 x 的新结点插入到不带头结点的单链表 head 的第 i 个结点的位置上*/LinkList p,q;p=(LinkList)malloc(sizeof(ListNode);/*以下三行:新建结点并初始化 */p-data=x;p-next=NULL;if(inext=*head;*head=p;else/*找到要插入的前一个位置,然后插入*/q=GetNode(*head,i-1);6p-next=q-next;q-next=p;/*单链表的删除,删除不带头结点的单链表中的第 i 个结点 */void DeleteList(LinkList *head,int i)LinkList p,q;if(inext);free(*head);*head=p;return;p=*head;while(p!=NULL)p=p-next;if(p=NULL)printf(“iL!“);elseq-next=p-next;free(p);7实验二 二叉树的建立和遍历一、 实验目的1掌握二叉树的建立算法2掌握二叉树的前序、中序和后序遍历算法。二、 实验环境操作系统和 C 语言系统三、 预习要求复习二叉树的生成及遍历算法,编写完整的程序。四、 实验内容要求采用二叉链表作为存储结构,完成二叉树的建立,前序、中序和后序遍历的操作,求所有叶子及结点总数的操作等。具体实现要求:分别利用前序遍历、中序遍历、后序遍历所建二叉树。五、 参考算法二叉树的建立算法思路:主要利用二叉树的性质:在编号的完全二叉树中,编号为i 的结点如果存在左孩子,则其编号为 2i;若其存在右孩子,则其编号为 2i+1;若存在父结点,则其编号为 i/2 取整。对任意二叉树,先按满二叉树对其进行编号,算法中使用一个辅助向量 s 来存放指向树结点的指针。如 si中存放编号为 i 的结点的指针,即为该结点的地址。当结点编号 i=1 时,所产生的结点为根结点,同时将指向该结点的指针存入 s1。当结点编号 i1 时,产生一个新的结点后,也要将指向该结点的指针存入 si,由上述性质可知:j=i/2 为它的双亲结点编号。如果 i 为偶数,则它是双亲结点的左孩子,即让 sj-lch=si;若 i 为奇数,则它是双亲结点的右孩子,即让 sj-rch=si。这样就将新输入的结点逐一与其双亲结点相连,生成二叉树。二叉树的遍历算法可以使用递归算法实现,也可采用非递归算法实现,可参考教材上算法实现。#include #include #include /*二叉树的定义*/typedef char DataType;/*DataType 可以是任何相应的数据类型如 int, float 或 char*/typedef struct btnode/*结点类型定义*/DataType data;/*结点的数据域*/struct btnode *lchild;/*结点的左指针域*/struct btnode *rchild;/*结点的右指针域*/BtNode;void main()8DataType ch20;BtNode *s20,*bt,*p;int i=0;/* 以下三行按照前中后序遍历二叉树的函数声明 */void pretrav(BtNode *bt);void intrav(BtNode *bt);void postrav(BtNode *bt);/*按满二叉树编号后的顺序输入结点字符,空的位置用 #代替,字符个数不要超过20 个*/printf(“ninput some characters:“);scanf(“%s“, ch);/*输入结点字符 */for(i=0; idata = chi;p-lchild = NULL;p-rchild = NULL;si = p;if(chi = #)continue;/*如果输入的是 #,即该位置没有结点,无需找其父节点*/if(i 0)if(i%2 = 1) si/2-lchild = p; /*根据 i 的奇偶性,将 p 结点链到其父节点的(左/右?)指针上*/else si/2-1-rchild = p; /*将 p 结点链到其父节点的(左/ 右?)指针上*/for(i=0; ilchild!=NULL else if(si-lchild!=NULL) printf(“%c,%c,%cs rchild is NULL!n“,si-data,si-lchild-data,si-data);else if(si-rchild!=NULL) printf(“%c,%cs lchild is NULL!,%cn“,si-data,si-data,si-rchild-data);else printf(“%c,%cis a leaf!n“,si-data,si-data);9/* 以下按照前中后序遍历二叉树 */printf(“npretrav!“);pretrav(s20);printf(“nintrav!“);intrav(s20);printf(“npostrav!“);postrav(s20);printf(“n“);while(1);/*前序遍历二叉树*/void pretrav(BtNode *bt)BtNode *p;p = bt;if(p != NULL)printf(“%c“,p-data);pretrav(bt-lchild);pretrav(bt-rchild);return;/*中序遍历二叉树*/ void intrav(BtNode *bt)if(bt != NULL)intrav(bt-lchild);printf(“%c“,bt-data);intrav(bt-rchild);return;/*后序遍历二叉树*/void postrav(BtNode *bt)if(bt != NULL)postrav(bt-lchild);postrav(bt-rchild);printf(“%c“,bt-data);10return;实验三 二叉排序树的建立和查找一、 实验目的1掌握二叉排序树的建立算法2掌握二叉排序树查找算法。二、 实验环境操作系统和 C 语言系统三、 预习要求复习二叉排序树的生成及查找算法,编写完整的程序。四、 实验内容实现二叉排序树上的查找算法。具体实现要求:用二叉链表做存储结构,输入键值序列,建立一棵二叉排序树并在二叉排序树上实现查找算法。五、 参考算法#include #include typedef int InfoType;typedef int KeyType; /*假定关键字类型为整数*/typedef struct node /*结点类型*/KeyType key; /*关键字项*/InfoType otherinfo;/*其它数据域, InfoType 视应用情况而定 下面不处理它*/struct node *lchild,*rchild;/*左右孩子指针*/BSTNode;typedef BSTNode *BSTree; /*BSTree 是二叉排序树的类型*/void main()BSTNode *SearchBST(BSTree T,KeyType key);void InsertBST(BSTree *Tptr,KeyType key);BSTree CreateBST(void);void ListBinTree(BSTree T); /*用广义表表示二叉树*/BSTree T;11BSTNode *p;int key;printf(“请输入关键字(输入 0 为结束标志):n“);T=CreateBST();ListBinTree(T);printf(“n“);printf(“请输入欲查找关键字:“);scanf(“%d“,p=SearchBST(T,key);if(p=NULL)printf(“没有找到%d!n“,key);elseprintf(“找到%d!n“,key);ListBinTree(p);printf(“n“);BSTNode *SearchBST(BSTree T,KeyType key) /*在二叉排序树 T 上查找关键字为 key 的结点,成功时返回该结点位置,否则返回 NULL*/if(T=NULL|key=T-key) /*递归的终结条件*/return T; /*若 T 为空,查找失败;否则成功,返回找到的结点位置*/if(keykey)return SearchBST(T-lchild,key);elsereturn SearchBST(T-rchild,key); /*继续在右子树中查找*/void InsertBST(BSTree *Tptr,KeyType key) /*若二叉排序树*Tptr 中没有关键字为 key,则插入,否则直接返回*/BSTNode *f,*p=*Tptr; /*p 的初值指向根结点*/while(p) /*查找插入位置*/if(p-key=key) return; /*树中已有 key,无须插入*/f=p; /*f 保存当前查找的结点*/p=(keykey)? p-lchild:p-rchild;/*若 keykey,则在左子树中查找,否则在右子树中查找*/p=(BSTNode *)malloc(sizeof(BSTNode);p-key=key;p-lchild=p-rchild=NULL; /*生成新结点*/if(*Tptr=NULL) /*原树为空*/*Tptr=p; /*新插入的结点为新的根*/else/*原树非空时将新结点*p 作为*f 的左孩子或右孩子插入*/12if(keykey)f-lchild=p;else f-rchild=p;BSTree CreateBST(void) /*输入一个结点序列,建立一棵二叉排序树,将根结点指针返回*/BSTree T=NULL; /*初始时 T 为空树*/KeyType key;scanf(“%d“, /*读入一个关键字*/while(key) /*假设 key=0 是输入结束标志*/InsertBST( /*将 key 插入二叉排序树 T*/scanf(“%d“, /*读入下一关键字*/return T; /*返回建立的二叉排序树的根指针*/六、 思考题请思考采用其他存储结构实现的二叉排序树建立算法。七、 实验报告要求具体内容包含以下几项:实验题目、实验目的、实验环境、实验内容与完成情况(要求附上自主设计的源程序) 、实验中出现的问题、对问题的解决方案、完成思考题、实验总结等。13实验五 数据库建立一、 实验目的1 熟练掌握用 SQL 语句实现基本表的创建。2 熟练掌握用 SQL 语句实现数据插入、数据更新和数据查询。3 熟练掌握用 SQL 语句实现数据的简单查询和连接查询。二、 实验环境SQL Server2000三、 预习要求SQL Server2000 的查询分析器和企业管理器的使用, SQL 数据定义和数据操纵语言。四、 实验内容(一)用 SQL 语句建立如下 mySPJ 数据库,包括 S,P ,J,和 SPJ 四个基本表(四张表的数据另给) ,要求实现关系的三类完整性。S(SNO,SNAME,STATUS,CITY);P(PNO,PNAME,COLOR,WEIGHT);J(JNO,JNAME,CITY);SPJ(SNO,PNO,JNO,QTY)供应商表 S 由供应商代码(SNO) 、供应商姓名(SNAME) 、供应商状态(STATUS) 、供应商所在城市(CITY)组成。零件表 P 由零件代码(PNO ) 、零件名(PNAME) 、颜色(COLOR) 、重量(WEIGHT)组成。工程项目表 J 由工程项目代码(JNO) 、工程项目名(JNAME) 、工程项目所在城市(CITY )组成。供应情况表 SPJ 由供应商代码(SNO) 、零件代码(PNO) 、工程项目代码(JNO) 、供应数量(QTY )组成,表示某供应商 供应某种零件 给某工程项目的数量为 QTY。(二)分别使用插入、删除、修改的方式更新基本表中的数据。五、 实验方法和步骤(一)使用 Microsoft SQL Server 企业管理器和查询分析器建立数据库 mySPJ:1.打开“开始程序Microsoft SQL Server 企业管理器 ”;142.在企业管理器左边的树标签中依次打开“Microsoft SQL Server SQL Server 组(local)(Windows NT)数据库” , (local)(Windows NT)前的红色标记转化为绿色标记表明 NT 服务已启动;3.从企业管理器的“工具”菜单中选择“SQL 查询分析器” ,打开查询分析器后,在其窗口书写创建数据库 mySPJ 的 SQL 语句,点击执行按钮(或 F5 键)执行该 SQL 语句;4.在企业管理器左边的树标签中查看数据库是否建立成功。(二)在数据库 mySPJ 中建立 S,P ,J,和 SPJ 四个基本表:按照实验内容给出的基本表结构在查询分析器窗口中书写 SQL 语句分别建立各表,并设置主键和外键约束;(三)更新表数据:1.利用 Insert 语句将习题中给出的示例记录插入各表。2.利用 Update 更新表中的记录:将 p 表中的所有红色零件的重量增加 5。update pset weight=weight+5where color=红;将 spj 表中所有天津供应商的 QTY 属性值减少 10。用子查询。update spjset qty=qty-10where sno in /不能用 sno= 因为返回值多于一个.(select snofrom swhere city=天津);3.利用 Delete 语句删除 p 表中的所有红色零件的记录。deletefrom pwhere color=红; 15实验六 数据库查询(一) 完成下面的简单查询:查询所有“天津”的供应商明细;select *from swhere city=天津 ;查询所有“红色”的 14 公斤以上的零件。select pnamefrom pwhere color=红 and weight14;查询工程名称中含有“厂”字的工程明细。select jno,jname,cityfrom jwhere jname like%厂%;(二) 完成下面的连接查询:等值连接:求 s 表和 j 表的相同城市的等值连接。select *from s,jwhere s.city=j.city; 自然连接:查询所有的供应明细,要求显示供应商、零件和工程的名称,并按照供应、工程、零件排序。select sname,jname,pnamefrom s,p,j,spj (他们之间没有直接的公共属性 只有用 spj 表来联系他们 他们的关系也在 spj 表中)where s.sno=spj.sno and p.pno=spj.pno and j.jno=spj.jno;精益 三建 螺母 精益 弹簧厂 螺母 精益 造船厂 螺母 16精益 一汽 螺栓 盛锡 三建 螺丝刀 盛锡 一汽 螺丝刀 盛锡 造船厂 螺丝刀 盛锡 机车厂 螺丝刀 盛锡 三建 凸轮 盛锡 一汽 凸轮 东方红 三建 螺母 东方红 三建 螺丝刀 丰泰盛 三建 凸轮 丰泰盛 弹簧厂 齿轮 丰泰盛 造船厂 齿轮 为民 造船厂 螺栓 为民 三建 螺丝刀 为民 一汽 齿轮 为民 造船厂 齿轮 笛卡尔积:求 s 和 p 表的笛卡尔积select *from s,p左连接:求 j 表和 spj 表的左连接。右连接:求 spj 表和 j 表的右连接。(三) 分组查询:1. 求各种颜色零件的平均重量。select color,avg(weight)from pgroup by color; 2.

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论