数据结构课程设计实验报告7300字 《数据结构》课程实验报告专业:指导老师:班级:姓名:学号:完成日期:一、 实验目的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 20typedef 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;i<=L->last;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(ielem[i]=e;L->last=i;i++;}else{printf("\n表满!");}scanf("%d",&e);}}void Locate(SeqList *L, int i,ElemType e){i=0;while ((i<=L->last)&&(L->elem[i]!=e))i++;if (i<=L->last)printf("\n%d在顺序表中第%d个位置上。
",e,i+1); elseprintf("\n没有此数!");}void InsList(SeqList *L, int i, ElemType e){int k;if(i<1||i>L->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(i<1||i>L->last+1){printf("\n删除位置不合法!");}else{*e=L->elem[i-1];for(k=i; k<=L->last; 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;j<=L->last;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("\n\n请输入你的选择:");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 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 ",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;}elseflag=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)<(p->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==j)printf("第%d个元素为:%c",i,*e); elseprintf("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("FALSE\n");else{printf("TRUE\n");printf("该元素在第%d个位置!",i-1); }}void InsList(LinkList L,int i,ElemType e) {Node *p,*s;int k=0;p=L;while(p!=NULL&&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个元素:%c\n",i,*e); }elseprintf("删除结点的位置i不合理!");}void ListLength(LinkList L){Node *p;int j=0;p=L->ne。