1、数据结构课程设计报告实验报告doc数据结构课程实验报告专业:指导老师:班级: :学号:完成日期:一、实验目的1、掌握线性表的顺序存储结构和链式存储结构;2、熟练掌握顺序表和链表基本算法的实现;3、掌握利用线性表数据结构解决实际问题的方法和基本技巧;4、按照实验题目要求独立正确地完成实验容(编写、调试算法程序,提交程序清单及及相关实验数据与运行结果);5、按时提交实验报告。二、实验环境计算机、C语言程序设计环境三、实验学时2学时,选做实验。四、实验容一、顺序表的基本操作实现实验要求:数据元素类型ElemType取整型int。按照顺序存储结构实现如下算法(各算法边界条件和返回结果适当给出):1创建
2、任意整数线性表(即线性表的元素值随机在键盘上输入),长度限定在20之;2打印(遍历)该线性表(依次打印出表中元素值);3在线性表中查找第i个元素,并返回其值;4在线性表中第i个元素之前插入一已知元素;5在线性表中删除第i个元素;6求线性表中所有元素值(整数)之和;二、链表(带头结点)基本操作实验要求:数据元素类型ElemType取字符型char。按照动态单循环链表结构实现如下算法(各算法边界条件适当给出):1创建任意字符型有序(递增排序)单循环链表(即链表的字符元素随机在键盘上输入),长度限定在15之;2打印(遍历)该链表(依次打印出表中元素值);3在链表中查找第i个元素,i合法返回元素值,否
3、则,返回FALSE;4在链表中查找与一已知字符相同的第一个结点,有则返回TRUE,否则,返回FALSE;5在链表中按照有序方式插入一已知字符元素;6在线性表中删除第i个结点;7计算链表的长度。五、实验容一步骤:#include#include#define MAX 20typedef int ElemType;typedef struct ElemType elemMAX; int last;SeqList;void InitList(SeqList *L) L-last=-1;void PrintList(SeqList *L) int i; printf(n现在的数据为:); for(i=
4、0;ilast;i+) printf(%d ,L-elemi); void CreatList(SeqList *L) ElemType e; int i=0; printf(n输入数据(-1退出):); scanf(%d,&e); while(e!=-1) if(ielemi=e; L-last=i; i+; else printf(n表满!); scanf(%d,&e); void Locate(SeqList *L, int i,ElemType e) i=0; while (ilast)&(L-elemi!=e) i+; if (ilast) printf(n%d在顺序表中第%d个位置
5、上。,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-elemk+1=L-elemk; L-elemi-1=e; L-last+; PrintList(L); void DelList(SeqList *L,int i,ElemType *e) int k; if(iL-las
6、t+1) printf(n删除位置不合法!); else *e=L-elemi-1; for(k=i; klast; k+) L-elemk-1=L-elemk; L-last=L-last-1; PrintList(L);void SumList(SeqList *L) int j,sum=0; for(j=0;jlast;j+) sum=sum+L-elemj; printf(所有元素之和:%d,sum);void menu() printf(n*菜单*); printf(n 1.创建任意整数线性表); printf(n 2.打印(遍历)线性表); printf(n 3.查找元素); pr
7、intf(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);
8、 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#in
9、clude#define MAX 15#define TURE 1#define FALSE 0typedef 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
10、,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(nMAX) 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(
11、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)&(jnext; j+; *e=p-date ; if(i
12、=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!=NUL
13、L&knext; 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)&(jnext; j+; if(p-next!=NULL) p-next=p-next-next; r=p-next; *e=r-date ; printf(删除第%d个元素:%cn,i,*
14、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个结点); pr
15、intf(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请输入你的选择(18):); scanf(%d,&i); switch(i) case 1: Create(L); break; case 2: Order(L); break; case 3: printf(输入要查找的第i个元素:); sc
16、anf(%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; 八、实验容二测试数据与实验结果:
copyright@ 2008-2023 冰点文库 网站版权所有
经营许可证编号:鄂ICP备19020893号-2