数据结构实验指导.docx

上传人:b****5 文档编号:3253886 上传时间:2022-11-21 格式:DOCX 页数:122 大小:895.99KB
下载 相关 举报
数据结构实验指导.docx_第1页
第1页 / 共122页
数据结构实验指导.docx_第2页
第2页 / 共122页
数据结构实验指导.docx_第3页
第3页 / 共122页
数据结构实验指导.docx_第4页
第4页 / 共122页
数据结构实验指导.docx_第5页
第5页 / 共122页
点击查看更多>>
下载资源
资源描述

数据结构实验指导.docx

《数据结构实验指导.docx》由会员分享,可在线阅读,更多相关《数据结构实验指导.docx(122页珍藏版)》请在冰豆网上搜索。

数据结构实验指导.docx

数据结构实验指导

.

 

数据结构实验指导书

 

宁夏师范学院计算机教研室

实验1线性表的抽象数据类型的实现

实验目的

1)掌握线性表的顺序存储结构和链式存储结构;

2)熟练掌握顺序表和链表基本算法的实现;

3)掌握利用线性表数据结构解决实际问题的方法和基本技巧;

4)按照实验题目要求独立正确地完成实验内容(编写、调试算法程序,提交程序清单及及相关实验数据与运行结果);

5)按时提交实验报告。

实验环境

计算机、C语言程序设计环境

实验学时

2学时,必做实验。

实验内容

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

要求:

数据元素类型ElemType取整型int。

按照顺序存储结构实现如下算法(各算法边界条件和返回结果适当给出):

1)创建任意整数线性表(即线性表的元素值随机在键盘上输入),长度限定在25之内;

2)打印(遍历)该线性表(依次打印出表中元素值);

3)在线性表中查找第i个元素,并返回其值;

4)在线性表中第i个元素之前插入一已知元素;

5)在线性表中删除第i个元素;

6)求线性表中所有元素值(整数)之和;

二、链表(带头结点)基本操作实验

要求:

数据元素类型ElemType取字符型char。

按照动态单循环链表结构实现如下算法(各算法边界条件适当给出):

1)创建任意字符型有序(递增排序)单循环链表(即链表的字符元素随机在键盘上输入),长度限定在15之内;

2)打印(遍历)该链表(依次打印出表中元素值);

3)在链表中查找第i个元素,i合法返回元素值,否则,返回FALSE;

4)在链表中查找与一已知字符相同的第一个结点,有则返回TRUE,否则,返回FALSE;

5)在链表中按照有序方式插入一已知字符元素;

6)在线性表中删除第i个结点;

7)计算链表的长度。

实验步骤

一、顺序表的源程序

#include

#include

#include

intlist[25];inti,n,a,sum=0,k,l;

inteleminsert;

/*------------------创建函数--------------*/

voidinitlist()

{

printf("Pleaseinputthetotaloftheelems:

");

scanf("%d",&n);

if(n>25||n<1){printf("ERROE!

");return;}

printf("Pleaseinputtheelems:

...\n");

for(i=0;i

{scanf("%d",&list[i]);

}

return;

}

/*------------------打印函数--------------*/

voidPrint(intlist[],intn)

{

intj;

for(j=0;j

printf("%d\t",list[j]);

printf("\n");

return;

}

/*------------------查找函数------------*/

intSearch(intlist[],intn,intm)

{

if(m<1||m>n){printf("ERROR!

\n");return;}

elseprintf("Theelemis%dat%dplace\n",list[m-1],m);

return;

}

/*----------------插入函数------------*/

voidInsert(intlist[],intn,intm,intelem)

{

intj;

if(m<1||m>n){printf("ERROR!

\n");return;}

for(j=n-1;j>=m-1;i--)

{list[j+1]=list[j];}

list[m-1]=elem;

n=n+1;

printf("Thenewlistare:

");

Print(list,n);

return;

}

/*---------------删除函数-----------*/

voidDelete(intlist[],intn,intm)

{

intq;intj;

if(m<1||m>n)

{printf("ERROR!

\n");return;}

j=list[m-1];

for(q=m-1;q<=n;q++)

{list[q]=list[q+1];}

printf("Thenewlistare:

");

Print(list,n-1);

free(j);

return;

}

/*-------------求和函数------------*/

voidSum(intlist[],intn,intsum)

{

intj;

for(j=0;j

{sum=sum+list[j];}

printf("Thesumis:

%d",sum);

return;

}

voidmenu()

{

intj;

/*------------菜单函数------------*/

menulab:

printf("**********************MENU******************\n\n");

printf("Createanewintlist:

...................press1\n\n");

printf("Printthewholelist:

....................press2\n\n");

printf("Searchbyorder:

........................press3\n\n");

printf("Inserttheelemintheplacei:

...........press4\n\n");

printf("Deletetheelembyorder:

................press6\n\n");

printf("Sumalleleminthelist:

................press7\n\n");

printf("exittheprograme:

.......................press0\n\n");

printf("**********************END*******************\n\n");

printf("Pleasechoosethenumberfrom(0~7).....");

checklabel:

scanf("%1d",&j);getchar();

if(j<0||j>7)

{printf("Error!

Pleasechooseagain......");

gotochecklabel;

}

printf("\n\tYouchoosethenumber%d\n",j);

printf("\n\tPressanykeytocontinue.....");

getchar();

clrscr();/*clearscreen*/

switch(j)

{

case1:

/*创建任意整数线性表*/

initlist();

clrscr();/*clearscreen*/

gotomenulab;

case2:

/*打印(遍历)该线性表*/

printf("Theoriginallistis:

");

Print(list,n);

printf("Pressanykeytocontinue.....");

getchar();

clrscr();/*clearscreen*/

gotomenulab;

case3:

/*在线性表中查找第i个元素,并返回其值*/

printf("InputwhichLNodeyouwanttoSearch(Inputnumber):

");

scanf("%d",&a);

getchar();

Search(l,n,a);

printf("Pressanykeytocontinue.....");

getchar();

clrscr();/*clearscreen*/

gotomenulab;

case4:

/*在线性表中第i个元素之前插入一已知元素*/

printf("Pleaseinputtheelem'splacewhereyouwanttoinsert");

scanf("%d",&k);

printf("Inputtheelemwhichyouwanttoinsert:

");

scanf("%d",&eleminsert);

Insert(list,n,k,eleminsert);

printf("Pressanykeytocontinue.....");

getchar();

clrscr();/*clearscreen*/

gotomenulab;

case5:

/*在线性表中删除第i个元素*/

printf("Pleaseinputtheelemyouwanttodelete:

");

scanf("%d",&l);

n=n+1;

Delete(list,n,l);

n=n-1;

printf("Pressanykeytocontinue.....");

getchar();

clrscr();/*clearscreen*/

gotomenulab;

case6:

/*求线性表中所有元素值(整数)之和*/

Sum(list,n,sum);

printf("Pressanykeytocontinue.....");

getchar();

clrscr();/*clearscreen*/

gotomenulab;

case0:

/*退出程序*/

printf("Pressanykeytocontinue.....");

getchar();

exit(0);

}}

 

voidmain()

{

voidmenu();

menu();

}

二、链表(带头结点)的源程序

#include

#include

structLNode{

charelem;

structLNode*next;

}*l,*p,*new;

inti,a,k,n;charc,s;

/*----------------创建函数-------------*/

voidintilist(void)

{

l=(structLNode*)malloc(sizeof(structLNode));

l->next=NULL;

clrscr();

printf("Inputthetotaloftheelems:

.....");

scanf("%d",&n);

getchar();

if(n>15)

printf("Error!

");

for(i=n;i>0;i--)

{

new=(struct

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

当前位置:首页 > 小学教育 > 英语

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1