河南科技大学计算机软件技术基础实验指导书及参考代码.docx
- 文档编号:2864397
- 上传时间:2023-05-04
- 格式:DOCX
- 页数:23
- 大小:38.65KB
河南科技大学计算机软件技术基础实验指导书及参考代码.docx
《河南科技大学计算机软件技术基础实验指导书及参考代码.docx》由会员分享,可在线阅读,更多相关《河南科技大学计算机软件技术基础实验指导书及参考代码.docx(23页珍藏版)》请在冰点文库上搜索。
河南科技大学计算机软件技术基础实验指导书及参考代码
目录
实验一单链表的运算2
实验二二叉树的建立和遍历5
实验三二叉排序树的建立和查找6
实验四windows操作系统及应用9
实验五数据库建立10
实验六数据库查询12
附录13
实验一单链表的运算
一、实验目的
1.掌握单链表的基本运算:
建立、插入和删除
2.掌握运用C语言上机调试单链表的基本方法。
二、实验环境
操作系统和C语言系统
三、预习要求
了解单链表的建立、插入和删除算法,编写完整的程序。
四、实验内容
设计算法,实现线性结构上的单链表的产生以及元素的查找、插入与删除。
具体实现要求:
(1)从键盘输入n个整数,以0作为结束标记,产生不带表头的单链表,并输入结点值。
(2)从键盘输入1个整数,在单链表中查找该结点的位置。
若找到,则显示“找到了”;否则显示“找不到”。
(3)从键盘输入2个整数,一个表示欲插入的位置i,另一个表示欲插入的数值x,将x插入在对应位置上,输出单链表所有结点值,观察输出结果。
(4)从键盘输入1个整数,表示欲删除结点的位置,输出单链表所有结点值,观察输出结果。
五、参考算法
#include
#include
/*单链表的定义*/
typedefintDataType;/*DataType可以是任何相应的数据类型如int,float或char*/
typedefstructnode/*结点类型定义*/
{DataTypedata;/*结点的数据域*/
structnode*next;/*结点的指针域*/
}ListNode;
typedefListNode*LinkList;
voidmain()
{inti;
DataTypekey,x;
LinkListhead;
ListNode*p;
LinkListCreateList(void);
voidPrintList(LinkListhead);
LinkListLocateNode(LinkListhead,DataTypekey);
LinkListGetNode(LinkListhead,inti);
voidInsertList(LinkList*head,DataTypex,inti);
voidDeleteList(LinkList*head,inti);
//clrscr();
head=CreateList();/*建立单链表*/
PrintList(head);/*打印单链表*/
printf("\n输入要查找的值:
");
scanf("%d",&key);
p=LocateNode(head,key);/*单链表查找*/
printf("\n请输入欲插入元素的位置:
");
scanf("%d",&i);
printf("\n请输入欲插入的元素:
");
scanf("%d",&x);
InsertList(&head,x,i);/*单链表插入*/
PrintList(head);/*打印单链表*/
printf("\n请输入欲删除结点的位置:
");
scanf("%d",&i);
DeleteList(&head,i);/*单链表删除*/
PrintList(head);/*打印单链表*/
}
/*单链表的建立,从后向前生成*/
LinkListCreateList(void)
{
LinkListhead,p;
intx;
head=NULL;
printf("inputsomeinteagersuntil0!
");
scanf("%d",&x);
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",&x);
}
return(head);
}
/*单链表的打印*/
voidPrintList(LinkListhead)
{
LinkListp;
p=head;
while(p!
=NULL)
{printf("%5d",p->data);
p=p->next;
}
}
/*单链表的查找,输入一个整数,显示该结点的位置*/
LinkListLocateNode(LinkListhead,DataTypekey)
{/*在不带头结点的单链表head中查找其值为key的结点*/
LinkListp;
if(head==NULL){printf("Listisnull!
");return(head);}
if(head->data==key){printf("thewanteddatais:
%d",head->data);return(head);}
p=head;
while((p->data!
=key)&&((p==NULL))
p=p->next;
if(p!
=NULL)printf("thewanteddatais:
%d",p->data);
elseprintf("thewanteddataisnotfound!
");
return(p);
}
/*单链表的查找2,在不带头结点的单链表head中查找第i个结点*/
LinkListGetNode(LinkListhead,inti)
{
LinkListp;
intn=1;
p=head;
while((p!
=NULL)&&(n
{if(nnext;}}
return(p);
}
/*单链表的插入*/
voidInsertList(LinkList*head,DataTypex,inti)
{/*将值为x的新结点插入到不带头结点的单链表head的第i个结点的位置上*/
LinkListp,q;
p=(LinkList)malloc(sizeof(ListNode));/*以下三行:
新建结点并初始化*/
p->data=x;
p->next=NULL;
if(i<=1)/*在第一个位置插入*/
{p->next=*head;*head=p;}
else/*找到要插入的前一个位置,然后插入*/
{q=GetNode(*head,i-1);
p-next=q->next;
q->next=p;
}
}
/*单链表的删除,删除不带头结点的单链表中的第i个结点*/
voidDeleteList(LinkList*head,inti)
{
LinkListp,q;
if((i<=0)||(*head=NULL)){printf("Listisnullori<=0!
");return;}
if(i==1){p=((*head)->next);free(*head);*head=p;return;}
p=*head;
while((p!
=NULL)&&(--i>0))
{q=p;p=p->next;}
if(p==NULL)printf("i>L!
");
else
{q->next=p->next;free(p);}
}
实验二二叉树的建立和遍历
一、实验目的
1.掌握二叉树的建立算法
2.掌握二叉树的前序、中序和后序遍历算法。
二、实验环境
操作系统和C语言系统
三、预习要求
复习二叉树的生成及遍历算法,编写完整的程序。
四、实验内容
要求采用二叉链表作为存储结构,完成二叉树的建立,前序、中序和后序遍历的操作,求所有叶子及结点总数的操作等。
具体实现要求:
分别利用前序遍历、中序遍历、后序遍历所建二叉树。
五、参考算法
二叉树的建立算法思路:
主要利用二叉树的性质:
在编号的完全二叉树中,编号为i的结点如果存在左孩子,则其编号为2i;若其存在右孩子,则其编号为2i+1;若存在父结点,则其编号为i/2取整。
对任意二叉树,先按满二叉树对其进行编号,算法中使用一个辅助向量s来存放指向树结点的指针。
如s[i]中存放编号为i的结点的指针,即为该结点的地址。
当结点编号i=1时,所产生的结点为根结点,同时将指向该结点的指针存入s[1]。
当结点编号i>1时,产生一个新的结点后,也要将指向该结点的指针存入s[i],由上述性质可知:
j=i/2为它的双亲结点编号。
如果i为偶数,则它是双亲结点的左孩子,即让s[j]->lch=s[i];若i为奇数,则它是双亲结点的右孩子,即让s[j]->rch=s[i]。
这样就将新输入的结点逐一与其双亲结点相连,生成二叉树。
二叉树的遍历算法可以使用递归算法实现,也可采用非递归算法实现,可参考教材上算法实现。
#include
#include
#include
/*二叉树的定义*/
typedefcharDataType;/*DataType可以是任何相应的数据类型如int,float或char*/
typedefstructbtnode/*结点类型定义*/
{
DataTypedata;/*结点的数据域*/
structbtnode*lchild;/*结点的左指针域*/
structbtnode*rchild;/*结点的右指针域*/
}BtNode;
voidmain()
{
DataTypech[20];
BtNode*s[20],*bt,*p;
inti=0;
/*以下三行按照前中后序遍历二叉树的函数声明*/
voidpretrav(BtNode*bt);
voidintrav(BtNode*bt);
voidpostrav(BtNode*bt);
/*按满二叉树编号后的顺序输入结点字符,空的位置用'#'代替,字符个数不要超过20个*/
printf("\ninputsomecharacters:
");
scanf("%s",ch);/*输入结点字符*/
for(i=0;i<20;i++)
{
if(ch[i]=='\0')
break;/*如果输入的是结束符*/
p=(BtNode*)malloc(sizeof(BtNode));/*创建一个树结点,由p指针指向,以下三行初始化新结点*/
p->data=ch[i];
p->lchild=NULL;
p->rchild=NULL;
s[i]=p;
if(ch[i]=='#')
continue;/*如果输入的是'#',即该位置没有结点,无需找其父节点*/
if(i>0)
{
if(i%2==1)
s[i/2]->lchild=p;/*根据i的奇偶性,将p结点链到其父节点的(左/右?
)指针上*/
elses[i/2-1]->rchild=p;
}/*将p结点链到其父节点的(左/右?
)指针上*/
}
for(i=0;i<20&&ch[i]!
='\0';i++)/*依次输出各结点及其孩子*/
{
if(ch[i]=='#')
continue;
if(s[i]->lchild!
=NULL&&s[i]->rchild!
=NULL)
printf("%c,%c,%c\n",s[i]->data,s[i]->lchild->data,s[i]->rchild->data);
elseif(s[i]->lchild!
=NULL)
printf("%c,%c,%c\'srchildisNULL!
\n",s[i]->data,s[i]->lchild->data,s[i]->data);
elseif(s[i]->rchild!
=NULL)
printf("%c,%c\'slchildisNULL!
%c\n",s[i]->data,s[i]->data,s[i]->rchild->data);
else
printf("%c,%c\isaleaf!
\n",s[i]->data,s[i]->data);
}
/*以下按照前中后序遍历二叉树*/
printf("\npretrav!
");
pretrav(s[20]);
printf("\nintrav!
");
intrav(s[20]);
printf("\npostrav!
");
postrav(s[20]);
printf("\n");
while
(1);
}
/*前序遍历二叉树*/
voidpretrav(BtNode*bt)
{
BtNode*p;
p=bt;
if(p!
=NULL)
{
printf("%c",p->data);
pretrav(bt->lchild);
pretrav(bt->rchild);
}
return;
}
/*中序遍历二叉树*/
voidintrav(BtNode*bt)
{
if(bt!
=NULL)
{
intrav(bt->lchild);
printf("%c",bt->data);
intrav(bt->rchild);
}
return;
}
/*后序遍历二叉树*/
voidpostrav(BtNode*bt)
{
if(bt!
=NULL)
{
postrav(bt->lchild);
postrav(bt->rchild);
printf("%c",bt->data);
}
return;
}
实验三二叉排序树的建立和查找
一、实验目的
1.掌握二叉排序树的建立算法
2.掌握二叉排序树查找算法。
二、实验环境
操作系统和C语言系统
三、预习要求
复习二叉排序树的生成及查找算法,编写完整的程序。
四、实验内容
实现二叉排序树上的查找算法。
具体实现要求:
用二叉链表做存储结构,输入键值序列,建立一棵二叉排序树并在二叉排序树上实现查找算法。
五、参考算法
#include
#include
typedefintInfoType;
typedefintKeyType;/*假定关键字类型为整数*/
typedefstructnode/*结点类型*/
{
KeyTypekey;/*关键字项*/
InfoTypeotherinfo;/*其它数据域,InfoType视应用情况而定下面不处理它*/
structnode*lchild,*rchild;/*左右孩子指针*/
}BSTNode;
typedefBSTNode*BSTree;/*BSTree是二叉排序树的类型*/
voidmain()
{
BSTNode*SearchBST(BSTreeT,KeyTypekey);
voidInsertBST(BSTree*Tptr,KeyTypekey);
BSTreeCreateBST(void);
voidListBinTree(BSTreeT);/*用广义表表示二叉树*/
BSTreeT;
BSTNode*p;
intkey;
printf("请输入关键字(输入0为结束标志):
\n");
T=CreateBST();
ListBinTree(T);
printf("\n");
printf("请输入欲查找关键字:
");
scanf("%d",&key);
p=SearchBST(T,key);
if(p==NULL)
printf("没有找到%d!
\n",key);
else
printf("找到%d!
\n",key);
ListBinTree(p);
printf("\n");
}
BSTNode*SearchBST(BSTreeT,KeyTypekey)
{/*在二叉排序树T上查找关键字为key的结点,成功时返回该结点位置,否则返回NULL*/
if(T==NULL||key==T->key)/*递归的终结条件*/
returnT;/*若T为空,查找失败;否则成功,返回找到的结点位置*/
if(key
returnSearchBST(T->lchild,key);
else
returnSearchBST(T->rchild,key);/*继续在右子树中查找*/
}
voidInsertBST(BSTree*Tptr,KeyTypekey)
{/*若二叉排序树*Tptr中没有关键字为key,则插入,否则直接返回*/
BSTNode*f,*p=*Tptr;/*p的初值指向根结点*/
while(p){/*查找插入位置*/
if(p->key==key)return;/*树中已有key,无须插入*/
f=p;/*f保存当前查找的结点*/
p=(key
p->lchild:
p->rchild;
/*若key
}
p=(BSTNode*)malloc(sizeof(BSTNode));
p->key=key;p->lchild=p->rchild=NULL;/*生成新结点*/
if(*Tptr==NULL)/*原树为空*/
*Tptr=p;/*新插入的结点为新的根*/
else/*原树非空时将新结点*p作为*f的左孩子或右孩子插入*/
if(key
f->lchild=p;
elsef->rchild=p;
}
BSTreeCreateBST(void)
{/*输入一个结点序列,建立一棵二叉排序树,将根结点指针返回*/
BSTreeT=NULL;/*初始时T为空树*/
KeyTypekey;
scanf("%d",&key);/*读入一个关键字*/
while(key){/*假设key=0是输入结束标志*/
InsertBST(&T,key);/*将key插入二叉排序树T*/
scanf("%d",&key);/*读入下一关键字*/
}
returnT;/*返回建立的二叉排序树的根指针*/
}
六、思考题
请思考采用其他存储结构实现的二叉排序树建立算法。
七、实验报告要求
具体内容包含以下几项:
实验题目、实验目的、实验环境、实验内容与完成情况(要求附上自主设计的源程序)、实验中出现的问题、对问题的解决方案、完成思考题、实验总结等。
实验五数据库建立
一、实验目的
1.熟练掌握用SQL语句实现基本表的创建。
2.熟练掌握用SQL语句实现数据插入、数据更新和数据查询。
3.熟练掌握用SQL语句实现数据的简单查询和连接查询。
二、实验环境
SQLServer2000
三、预习要求
SQLServer2000的查询分析器和企业管理器的使用,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。
(二)分别使用插入、删除、修改的方式更新基本表中的数据。
五、实验方法和步骤
(一)使用MicrosoftSQLServer企业管理器和查询分析器建立数据库mySPJ:
1.打开“开始->程序->MicrosoftSQLServer->企业管理器”;
2.在企业管理器左边的树标签中依次打开“MicrosoftSQLServer->SQLServer组->(local)(WindowsNT)->数据库”,(local)(WindowsNT)前的红色标记转化为绿色标记表明NT服务已启动;
3.从企业管理器的“工具”菜单中选择“SQL查询分析器”,打开查询分析器后,在其窗口书写创建数据库mySPJ的SQL语句,点击执行按钮(或F5键)执行该SQL语句;
4.在企业管理器左边的树标签中查看数据库是否建立成功。
(二)在数据库mySPJ中建立S,P,J,和SPJ四个基本表:
按照实验内容给出的基本表结构在查询分析器窗口中书写SQL语句分别建立各表,并设置主键和外键约束;
(三)更新表数据:
1.利用Insert语句将习题中给出的示例记录插入各表。
2.利用Update更新表中的记录:
①将p表中的所有红色零件的重量增加5。
updatep
setweight=weight+5
wherecolor='红';
②将spj表中所有天津供应商的QTY属性值减少10。
用子查询。
updatespj
setqty=qty-10
wheresnoin//不能用sno=因为返回值多于一个...
(selectsno
froms
wherecity='天津');
3.利用Delete语句删除p表中的所有红色零件的记录。
delete
fromp
wherecolor='红';
实验六数据库查询
(一)完成下面的简单查询:
①查询所有“天津”的供应商明细;
select*
froms
wherecity='天津';
②查询所有“红色”的14公斤以上的零件。
selectpname
fromp
wherecolor='红'andweight>14;
③查询工程名称中含有“厂”字的工程明细。
selectjno,jname,city
fromj
wherejnamelike'%厂%';
(二)完成下面的连接查询:
①等值连接:
求s表和j表的相同城
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 河南 科技大学 计算机 软件技术 基础 实验 指导书 参考 代码