民大 计算机软件基础上机实验报告.docx

上传人:b****2 文档编号:17412200 上传时间:2023-07-25 格式:DOCX 页数:23 大小:112.23KB
下载 相关 举报
民大 计算机软件基础上机实验报告.docx_第1页
第1页 / 共23页
民大 计算机软件基础上机实验报告.docx_第2页
第2页 / 共23页
民大 计算机软件基础上机实验报告.docx_第3页
第3页 / 共23页
民大 计算机软件基础上机实验报告.docx_第4页
第4页 / 共23页
民大 计算机软件基础上机实验报告.docx_第5页
第5页 / 共23页
民大 计算机软件基础上机实验报告.docx_第6页
第6页 / 共23页
民大 计算机软件基础上机实验报告.docx_第7页
第7页 / 共23页
民大 计算机软件基础上机实验报告.docx_第8页
第8页 / 共23页
民大 计算机软件基础上机实验报告.docx_第9页
第9页 / 共23页
民大 计算机软件基础上机实验报告.docx_第10页
第10页 / 共23页
民大 计算机软件基础上机实验报告.docx_第11页
第11页 / 共23页
民大 计算机软件基础上机实验报告.docx_第12页
第12页 / 共23页
民大 计算机软件基础上机实验报告.docx_第13页
第13页 / 共23页
民大 计算机软件基础上机实验报告.docx_第14页
第14页 / 共23页
民大 计算机软件基础上机实验报告.docx_第15页
第15页 / 共23页
民大 计算机软件基础上机实验报告.docx_第16页
第16页 / 共23页
民大 计算机软件基础上机实验报告.docx_第17页
第17页 / 共23页
民大 计算机软件基础上机实验报告.docx_第18页
第18页 / 共23页
民大 计算机软件基础上机实验报告.docx_第19页
第19页 / 共23页
民大 计算机软件基础上机实验报告.docx_第20页
第20页 / 共23页
亲,该文档总共23页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

民大 计算机软件基础上机实验报告.docx

《民大 计算机软件基础上机实验报告.docx》由会员分享,可在线阅读,更多相关《民大 计算机软件基础上机实验报告.docx(23页珍藏版)》请在冰点文库上搜索。

民大 计算机软件基础上机实验报告.docx

民大计算机软件基础上机实验报告

年级

12级

班号

1204

学号

专业

自动化

姓名

实验名称

 实验一、顺序表的基本操作

实验

类型

设计型

综合型

创新型

实验目的:

1.理解线性表顺序存储结构的存储方式及其特点。

2.掌握对顺序表存储结构的描述、基本操作的算法实现。

3.掌握通过简单实验对C语言基础知识进行回顾;为后序的实验做准备。

实验要求:

1.程序采用模块化设计。

(独立的功能要用独立的函数来实现。

2.建立相应的功能菜单。

(针对本程序的5个功能建立相应的五个功能菜单,选择相应的功能选项后进入相应的功能操作界面)

#include

#include

#definemaxsize100

typedefstruct

squence

{

chardata[maxsize];

intlen;

}

squ;

//voiddisp(&word);

voidmenu()/*选择菜单*/

{

printf("本代码实现顺序表的如下几个基本功能,请选择对应的功能选项进行相应操作:

\n");

printf("1.创建顺序表\n");

printf("2.查找字符\n");

printf("3.删除字符\n");

printf("4.插入字符\n");

printf("5.修改字符\n");

printf("6.显示所有字符以及字符数量\n");

printf("0.退出程序\n");

}voidinit(squ*s)/*清空*/

{

s->len=0;

}

voidcreate(squ*s)/*创建表*/

{

charch;

printf("请依次输入顺序表的字符序列,结束请输入'#'\n");

getchar();

while

(1)//循环体结果,在循环中实现中断

{

scanf("%c",&ch);

if(ch=='#')

{

printf("输入结束,请选择操作项\n");

break;

}

elseif(s->len==maxsize)

{

printf("顺序表存储空间已满,不能继续输入。

\n");

break;

}

else

{

s->data[s->len]=ch;//实现字符的存储

s->len++;

}

}

}

voidsearch(squ*s,charc)/*查询*/

{inti,flag=0;

for(i=0;ilen;i++)

{if(s->data[i]==c)

{printf("您查找的字符在链表中的位置为:

%d\n",i);

printf("请重新选择操作项\n");

flag=1;}}

if(flag==0)

printf("顺序表中没有该字符,请重新选择操作项\n");}

voiddel(squ*s,inti)/*删除*/

{intj;

for(j=i;jlen;j++)

{s->data[j]=s->data[j+1];//实现将i位置后的所有字符前移,i+1位置的字符替代i上的字符}

s->len--;//链表长度减1

s->data[s->len]=0;//原链表最后的位置上为空}

voidput(squ*s,inti,charc)/*插入*/

{intj;

if(s->len==maxsize)

printf("顺序表已满,无法插入字符\n");

else

{for(j=s->len+1;j>=i;j--)

{s->data[j]=s->data[j-1];//位置i后的字符后移,把第i个位置空出}

s->data[i]=c;//将字符c存储到i位置

s->len++;}}

voidreplace(squ*s,inti,charc)/*替换*/

{s->data[i-1]=c;}

intshowall(squ*s)

{intj;

printf("运行结果如下:

\n");

printf("顺序表中的数据依次为:

");

for(j=0;jlen;j++)

{printf("%c",s->data[j]);//依次输出字符}

printf("\n");

printf("顺序表长度为:

%d\n",s->len);

printf("请重新选择操作项\n");

return0;}

voidmain()

{squs;

intchoice=0;

intf=0;

init(&s);

menu();

while

(1)

{scanf("%d",&choice);

switch(choice)

{case1:

if(s.len!

=0)

{charc;

printf("顺序表已经初始化,再次初始化将清除原有数据。

是否继续(y/n):

");

getchar();

scanf("%c",&c);

while

(1)

{

if(c=='y')

{

s.len=0;

create(&s);

break;

}

elseif(c=='n')

{

break;

printf("请重新选择操作项\n");

}

}

}

else

{

create(&s);

}

break;

case2:

charc1;

printf("请输入想查询的字符\n");

getchar();

scanf("%c",&c1);

search(&s,c1);

break;

case3:

inti1;

printf("请输入你想删除的字符位置\n");

scanf("%d",&i1);

while(i1>s.len)

{

printf("超出已有的表,请重新输入。

\n");

scanf("%d",&i1);

}

del(&s,i1);

showall(&s);

break;

case4:

inti2;

charc2;

printf("请输入想在哪个位置之前插入字符以及插入的字符,中间以逗号隔开\n");

scanf("%d,%c",&i2,&c2);

while(i2>s.len+1)

{

printf("超出已有的表,请重新输入。

\n");

scanf("%d,%c",&i2,&c2);

}

put(&s,i2,c2);

showall(&s);

break;

case5:

inti3;

charc3;

printf("请输入想替换的位置以及替换的字符,中间以逗号隔开\n");

scanf("%d,%c",&i3,&c3);

while(i3>s.len)

{

printf("超出已有的表,请重新输入\n");

scanf("%d,%c",&i3,&c3);

}

replace(&s,i3,c3);

showall(&s);

break;

case6:

showall(&s);

break;

case0:

exit(0);

default:

printf("输入序号错误,请重新输入!

\n");

}

if(f==1)

break;

}}

实验结果分析及心得体会

教师签名:

2013年月日

年级

12级

班号

1204

学号

专业

自动化

姓名

实验名称

 实验二、链表的基本操作

实验

类型

设计型

综合型

创新型

实验目的:

1.理解线性表链式存储结构的存储方式及其特点。

2.掌握对链表存储结构的描述、基本操作的算法实现。

3.通过实验掌握对C语言指针的基本应用。

实验要求:

1.创建链表:

根据用户输入的字符依次创建链表(以特定字符‘#’作为输入的结束符,用户每输入一个字符,生成链表的一个结点,并将该结点插入到末尾)。

2.插入:

该操作接收用户输入的插入位置以及插入结点的数据,生成新的结点并将其插入到指定的结点之前。

3.删除:

根据用户指定的删除位置(或删除字符)删除相应结点。

4.查找:

查找链表中是否存在给定值的结点。

5.显示:

依次显示链表中的每个字符。

#include

#include

#include

#include

#defineCREAT_LIST(PNODE)malloc(sizeof(NODE))

typedefstructNod

{chardat;

structNod*pNext;

}NODE,*PNODE;/*链表结点结构体*/

voidstart_list(void);//菜单

PNODECreate_List(void);//创建链表

voidInsert_Data(PNODEpHead,charc,intn);/*链表中插入字符*/

voidDel_List(PNODEpHead,intn);//删除

intSearch_Data(PNODEpHead,chardat);//查找

voidTraversal_List(PNODEpHead);//显示

intList_Len(PNODEpHead);//求长度

intmain(void)

{PNODEpHead;

inti;

charc;

for(;;)

{start_list();

printf("\n请输入功能序号:

");

fflush(stdin);

scanf("%d",&i);

switch(i){case1:

{fflush(stdin);

pHead=Create_List();

break;}

case2:

{fflush(stdin);

Traversal_List(pHead);

break;}

case3:

{fflush(stdin);

printf("输入需要查找的数据:

");

scanf("%c",&c);

if(i=Search_Data(pHead,c))

printf("\n%c的在第%d位\n",c,i);

else

printf("找不到这个数据!

");

break;}

case4:

{fflush(stdin);

printf("输入需要删除数据的位置:

");

scanf("%d",&i);

Del_List(pHead,i);

break;}

case5:

{printf("请输入要插入的数据位置和数据(位置,数据):

");

scanf("%d,%c",&i,&c);

Insert_Data(pHead,c,i);

break;}

case0:

exit(0);

default:

printf("输入序号错误,请重新输入!

\n");

}

fflush(stdin);

printf("按回车键继续");

getchar();

system("cls");}

return0;}

/****************************************

*函数名:

start_list

*参数:

*功能:

用于显示菜单列表

****************************************/

voidstart_list(void)

{printf("\n链表的基本操作:

\n");

printf("\n1.创建一条单链表\n");

printf("\n2.显示链表所有内容\n");

printf("\n3.在链表查询指定数据位置\n");

printf("\n4.删除链表中指定的数据\n");

printf("\n5.在链表表指定位置插入数据\n");

printf("\n0.退出程序\n");}

/****************************************

*函数名:

Create_List

*参数:

*功能:

根据用户输入的字符依次创建链表

****************************************/

PNODECreate_List(void)

{chardat;

PNODEpHead=NULL,pNew=NULL,pTail=NULL;

/*防止野指针*/

pHead=CREAT_LIST;

if(pHead==NULL)

printf("内存分配失败;("),exit(0);

/*内存分配是否成功*/

pTail=pHead;

printf("请输入链表内容(以#号结束):

");

while((dat=getche())!

='#')

{pNew=CREAT_LIST;

if(pNew==NULL)

printf("error;("),exit(0);

pTail->pNext=pNew;

pNew->dat=dat;

pTail=pNew;}

pTail->pNext=NULL;

printf("\n链表创建成功!

\n");

returnpHead;}

/****************************************

*函数名:

List_Len

*参数:

pHead(根结点指针)

*功能:

求出链表长度

****************************************/

intList_Len(PNODEpHead)

{intlen;

for(len=0;pHead->pNext;pHead=pHead->pNext)

len++;

returnlen;}

/****************************************

*函数名:

Insert_Data

*参数:

pHead(根结点指针),c(插入的字符),n(删除的位置)

*功能:

该操作接收用户输入的插入位置以及插入结点的数据

*生成新的结点并将其插入到指定的结点之前。

****************************************/

voidInsert_Data(PNODEpHead,charc,intn)

{PNODEpNew=NULL;

inti=List_Len(pHead);

if((n>i)||(n<=0))

{printf("输入位置错误!

\n");

return;

}//输入位置正确性检查

pNew=CREAT_LIST;

if(pNew==NULL)

printf("error;("),exit(0);/*为新结点分配内存并检查是否分配成功*/

pNew->dat=c;//将要插入的数据赋予新结点

for(i=0;i<(n-1);i++)

pHead=pHead->pNext;

pNew->pNext=pHead->pNext;

pHead->pNext=pNew;

/*连接新结点*/

printf("插入完成!

");}

/****************************************

*函数名:

Search_Data

*参数:

pHead(根结点指针),dat(查找的字符)

*功能:

查找链表中是否存在给定值的结点。

****************************************/

intSearch_Data(PNODEpHead,chardat)

{inti=0;

while(pHead->pNext)

{pHead=pHead->pNext;

i++;

if(pHead->dat==dat)

returni;

}return0;}

/****************************************

*函数名:

Traversal_List

*参数:

pHead(根结点指针)

*功能:

依次显示链表中的每个字符

****************************************/

voidTraversal_List(PNODEpHead)

{if(pHead==NULL)

return;

while(pHead->pNext)

{pHead=pHead->pNext;

putchar(pHead->dat);

}printf("\n");}

/****************************************

*函数名:

Del_List

*参数:

pHead(根结点指针),n(删除的位置)

*功能:

根据用户指定的删除位置删除相应结点。

****************************************/

voidDel_List(PNODEpHead,intn)

{PNODEpNew=NULL;

inti=List_Len(pHead);

if((n>i)||(n<=0))

{printf("输入位置有误!

\n");

return;

}//检查位置是否正确

for(i=0;i<(n-1);i++)

pHead=pHead->pNext;

pNew=pHead->pNext;

pHead->pNext=pNew->pNext;

/*断开结点*/

free(pNew);//释放结点

printf("删除成功!

");

}

 

教师签名:

2013年月日

年级

12级

班号

1204

学号

专业

自动化

姓名

实验名称

 实验三、二叉树的基本操作

实验

类型

设计型

综合型

创新型

实验目的:

1.理解二叉树存储结构的存储方式及其特点。

2.掌握对二叉树构的描述、基本操作的算法实现。

3.通过实验掌握对C语言指针的基本应用。

实验要求:

1)从键盘输入二叉树的各结点值,按先序递归方式创建二叉树2)分别实现先序、中序、后序递归遍历二叉树3)输出二叉树的高度4)输出二叉树的按层次遍历序列*

5)以菜单方式运行

#include

#include

#include

#definemaxsize1024

typedefchardatatype;

typedefstructnode

{

datatypedata;

structnode*lchild,*rchild;

}bitree;

bitree*CREATREE()

{

charch;

bitree*Q[maxsize];

intfront,rear;

bitree*root,*s;

root=NULL;

front=1;

rear=0;

printf("请输入二叉树的各结点,@表示虚结点,#表示结束:

\n");

scanf("%c",&ch);

while(ch!

='#')

{

s=NULL;

if(ch!

='@')

{

s=(bitree*)malloc(sizeof(bitree));

s->data=ch;

s->lchild=NULL;

s->rchild=NULL;

}

rear++;

Q[rear]=s;

if(rear==1)root=s;

else

{

if(s&&Q[front])

if(rear%2==0)Q[front]->lchild=s;

elseQ[front]->rchild=s;

if(rear%2==1)front++;

}

scanf("%c",&ch);

}

returnroot;

}

voidpreorder(bitree*p)

{if(p!

=NULL)

{

printf("%c",p->data);

preorder(p->lchild);

preorder(p->rchild);

}

return;

}

voidinorder(bitree*p)

{

if(p!

=NULL)

{inorder(p->lchild);

printf("%c",p->data);

inorder(p->rchild);

}

return;

}

voidpostorder(bitree*p)

{

if(p!

=NULL)

{

postorde

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > IT计算机 > 计算机软件及应用

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2