数据结构课程设计实验报告.doc由刀豆文库小编整理,希望给你工作、学习、生活带来方便,猜你可能喜欢“电子设计实验报告doc”。
《数据结构》课程实验报告
专业:
指导老师:
班级:
姓名:
学号:
完成日期:
一、实验目的1、掌握线性表的顺序存储结构和链式存储结构;
2、熟练掌握顺序表和链表基本算法的实现;
3、掌握利用线性表数据结构解决实际问题的方法和基本技巧;
4、按照实验题目要求独立正确地完成实验内容(编写、调试算法程序,提交程序清单及及相关实验数据与运行结果);
5、按时提交实验报告。
二、实验环境
计算机、C语言程序设计环境
三、实验学时
2学时,选做实验。
四、实验内容
一、顺序表的基本操作实现实验
要求:数据元素类型ElemType取整型int。按照顺序存储结构实现如下算法(各算法边界条件和返回结果适当给出):
① 创建任意整数线性表(即线性表的元素值随机在键盘上输入),长度限定在20之内; ② 打印(遍历)该线性表(依次打印出表中元素值); ③ 在线性表中查找第i个元素,并返回其值; ④ 在线性表中第i个元素之前插入一已知元素; ⑤ 在线性表中删除第i个元素;
⑥ 求线性表中所有元素值(整数)之和;
二、链表(带头结点)基本操作实验
要求:数据元素类型ElemType取字符型char。按照动态单循环链表结构实现如下算法(各算法边界条件适当给出):
① 创建任意字符型有序(递增排序)单循环链表(即链表的字符元素随机在键盘上输入),长度限定在15之内; ② 打印(遍历)该链表(依次打印出表中元素值); ③ 在链表中查找第i个元素,i合法返回元素值,否则,返回FALSE; ④ 在链表中查找与一已知字符相同的第一个结点,有则返回TRUE,否则,返回FALSE; ⑤ 在链表中按照有序方式插入一已知字符元素; ⑥ 在线性表中删除第i个结点; ⑦ 计算链表的长度。
五、实验内容一步骤:
#include #include #define MAX 20 typedef int ElemType;typedef struct { ElemType elem[MAX];int last;}SeqList;void InitList(SeqList *L){ L->last=-1;} void PrintList(SeqList *L)
{ int i;
printf(“n现在的数据为:”);
for(i=0;ilast;i++)
printf(“%d ”,L->elem[i]);
}
void CreatList(SeqList *L){ ElemType e;int i=0;printf(“n输入数据(-1退出):”);
scanf(“%d”,&e);while(e!=-1){
if(i
{
L->elem[i]=e;
L->last=i;
i++;
}
else
{
printf(“n表满!”);
}
scanf(“%d”,&e);} } void Locate(SeqList *L, int i,ElemType e){ i=0;while((ilast)&&(L->elem[i]!=e))
i++;if(ilast)
printf(“n%d在顺序表中第%d个位置上。”,e,i+1);else
printf(“n没有此数!”);} void InsList(SeqList *L, int i, ElemType e){
int k;
if(iL->last+2)
{
printf(“n插入位置i值不合法”);
}
else if(L->last>=MAX-1)
printf(“n表已满无法插入”);
else
{
for(k=L->last;k>=i-1;k--)
L->elem[k+1]=L->elem[k];
L->elem[i-1]=e;
L->last++;
}
PrintList(L);} void DelList(SeqList *L,int i,ElemType *e){ int k;if(iL->last+1){
printf(“n删除位置不合法!”);} else
{
*e=L->elem[i-1];
for(k=i;klast;k++)
L->elem[k-1]=L->elem[k];
L->last=L->last-1;
} PrintList(L);} void SumList(SeqList *L){ int j,sum=0;for(j=0;jlast;j++){
sum=sum+L->elem[j];} printf(“所有元素之和:%d”,sum);} void menu(){ printf(“n************************菜单*********************”);printf(“n
1.创建任意整数线性表”);printf(“n
2.打印(遍历)线性表”);printf(“n
3.查找元素”);printf(“n
4.插入元素”);printf(“n
5.删除元素”);printf(“n
6.所有元素之和”);printf(“n
7.退出”);printf(“n***********************************************”);} void main(){ int i;int flag=0;ElemType e;SeqList *L;L=(SeqList*)malloc(sizeof(SeqList));
InitList(L);menu();while(!flag){
printf(“nn请输入你的选择:”);
scanf(“%d”,&i);
switch(i)
{
case 1:
CreatList(L);
break;
case 2:
PrintList(L);
break;
case 3:
printf(“输入要查找的数值:”);
scanf(“%d”,&e);
Locate(L,i,e);
break;
case 4:
printf(“输入插入位置和数据值(a b):”);
scanf(“%d%d”,&i,&e);
InsList(L,i,e);
break;
case 5:
printf(“输入要删除元素的位置:”);
scanf(“%d”,&i);
DelList(L,i,&e);
break;
case 6:
SumList(L);
break;
case 7:
flag=1;
break;
} } }
六、实验内容一测试数据与实验结果:
七、实验内容二步骤:
#include #include #define MAX 15 #define TURE 1 #define FALSE 0 typedef char ElemType;typedef struct Node { char date;struct Node * next;
}Node,*LinkList;void InitList(LinkList *L){ *L=(LinkList)malloc(sizeof(char));(*L)->next=NULL;} void PrintfLink(LinkList L)
{ LinkList p;
p=L->next;
printf(“链表为:”);while(p!=NULL)
{
printf(“%c ”,p->date);
p=p->next;
} } void Create(LinkList L){ LinkList s,r;char c;int flag=1;int n;r=L;printf(“元素个数:”);scanf(“%d”,&n);if(n>MAX)
printf(“超出限定长度!”);else {
printf(“输入字符(以#键结束):”);
while(flag)
{
scanf(“%c”,&c);
if(c!='#')
{
s=(Node*)malloc(sizeof(char));
s->date=c;
r->next=s;
r=s;
}
else
flag=0;
r->next =NULL;
} } } void Order(LinkList L){ char c;Node *r,*q,*p;for(r=L->next;r->next!=NULL;r=r->next){
p=r;
for(q=r->next;q;q=q->next)
if((q->date)date))
p=q;
if(p!=r)
{
c=r->date;
r->date=p->date;
p->date=c;
} } PrintfLink(L);
}
void Get(LinkList L, int i, ElemType *e){
int j;Node *p;
p=L;j=-1;while((p->next!=NULL)&&(j
{
p=p->next;
j++;
} *e=p->date;if(i==j)
printf(“第%d个元素为:%c”,i,*e);
else
printf(“FALSE”);
}
void Locate(LinkList L, ElemType e){ int i=1;LinkList p;p=L->next;while(p&&p->date!=e){
i=i++;
p=p->next;} if(!p)
printf(“FALSEn”);else
{
printf(“TRUEn”);
printf(“该元素在第%d个位置!”,i-1);} } void InsList(LinkList L,int i,ElemType e){ Node *p,*s;
int k=0;
p=L;
while(p!=NULL&&k
{
p=p->next;
k=k++;
}
if(!p)
{
printf(“插入位置不合理!”);
}
s=(Node*)malloc(sizeof(char));
s->date=e;
s->next=p->next;
p->next=s;Order(L);} void DelList(LinkList L,int i,ElemType *e){ Node *p,*r;int j;j=0;
p=L;
while((p->next!=NULL)&&(j
{
p=p->next;
j++;
}
if(p->next!=NULL)
{
p->next=p->next->next;
r=p->next;
*e=r->date;
printf(“删除第%d个元素:%cn”,i,*e);} else
printf(“删除结点的位置i不合理!”);
} void ListLength(LinkList L){ Node *p;int j=0;p=L->next;while(p!=NULL){
p=p->next;
j++;} printf(“单链表的长度:%d”,j);} void menu(){ printf(“n************************菜单*********************”);printf(“n
1.创建任意字符型单循环链表”);printf(“n
2.打印(遍历)该链表”);printf(“n
3.查找第i个元素”);printf(“n
4.查找与一已知字符相同的元素”);printf(“n
5.插入元素”);printf(“n
6.删除第i个结点”);printf(“n
7.计算链表的长度”);printf(“n
8.退出”);printf(“n***********************************************”);} void main(){ int i;int flag=0;ElemType e;
LinkList L;L=(LinkList)malloc(sizeof(char));
InitList(&L);menu();while(!flag){
printf(“nn请输入你的选择(1~8):”);
scanf(“%d”,&i);
switch(i)
{
case 1:
Create(L);
break;
case 2:
}
}
Order(L);break;case 3: printf(“输入要查找的第i个元素:”);scanf(“%d”,&i);Get(L,i,&e);break;case 4: printf(“输入查找的元素:”);rewind(stdin);scanf(“%c”,&e);Locate(L,e);break;case 5: printf(“输入插入的元素:”);rewind(stdin);scanf(“%c”,&e);InsList(L,i,e);break;case 6: printf(“输入要删除第几个结点:”);scanf(“%d”,&i);DelList(L,i,&e);break;case 7: ListLength(L);break;case 8: flag=1;break;}
八、实验内容二测试数据与实验结果:
课 程 设 计 任 务 书信息 学院 信息管理与信息系统 专业 09级1班 班 孙鹏一、二、课程设计题目: 迷宫求解、一元多项式 课程设计主要参考资料: 数据结构(C语言版) 严蔚敏、吴伟......
数据结构课程设计题目(2013年)一、必做题 1、图书管理系统(线性表) [问题描述]设计一个程序,记录并统计图书使用情况。 [基本要求] (1)图书信息包括图书ID号,图书名,出版社名,出版年月......
课程设计题目1、运动会分数统计任务:参加运动会有n个学校,学校编号为1……n。比赛分成m个男子项目,和w个女子项目。项目编号为男子1……m,女子m+1……m+w。不同的项目取前五名或......
《数据结构》课程设计报告学 号 姓 名 班 级 指导教师XXX XXX XXX XXX 安徽工业大学计算机学院2014年6月利用栈实现迷宫问题的求解一、问题描述以一个M*N的长方阵表示迷宫,0......
数据结构课程设计计算机科学与技术2008级1班课程设计题目:图书借阅管理系统 姓名:学号:一.需求分析说明图书借阅处理过程简述处理过程主要包含:新增图书上架、办理图证、图书查询......