数据结构课程设计实验报告.doc

时间:2024.4.25

                                                                                                                    

《数据结构》课程实验报告

专业:

指导老师:

班级:  

                       

姓名:   

                                       

学号:  

                         

完成日期:           

一、  实验目的

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

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

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

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

5、        按时提交实验报告。

二、实验环境

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

三、实验学时

2学时,选做实验。

四、实验内容

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

要求:数据元素类型ElemType取整型int。按照顺序存储结构实现如下算法(各算法边界条件和返回结果适当给出):

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

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

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

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

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

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

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

要求:数据元素类型ElemType取字符型char。按照动态单循环链表结构实现如下算法(各算法边界条件适当给出):

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

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

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

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

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

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

⑦    计算链表的长度。

五、实验内容一步骤:

#include<stdio.h>

#include<stdlib.h>

#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;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(i<MAX)

                 {

                         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 ((i<=L->last)&&(L->elem[i]!=e))

                 i++;

        if  (i<=L->last)

                 printf("\n%d在顺序表中第%d个位置上。",e,i+1);

        else

                 printf("\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<stdio.h>

#include<malloc.h>

#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)<(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)&&(j<i))

   {

        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("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&&k<i-1)

    {

        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<i-1))

    {

        p=p->next;

                 j++;

    }                              

    if(p->next!=NULL)   

    {

           p->next=p->next->next;

                 r=p->next;

                 *e=r->date ;

                 printf("删除第%d个元素:%c\n",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("\n\n请输入你的选择(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;

                 }

        }

}

八、实验内容二测试数据与实验结果:

  

        

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             

更多相关推荐:
数据结构课程设计实验报告

数据结构与算法课程设计报告姓名林小琼学号0907022118班级09网络工程设计时间20xx11020xx114审阅教师目录一课程设计的目的与要求含设计指标2二方案实现与调试221仓库管理系统222通讯录管理系...

数据结构课程设计实验报告格式

课程课程设计系电子信息与计算机科学系专业计算机科学与技术班级文计1111姓名毕萌玉张菁张帅学号20xx905141221011任课教师高慧学年学期20xx20xx2学期20xx年6月29日任务分配程序员张菁主要...

数据结构课程设计实验报告

软件111班18号赵庆珍数据结构课程设计任务书学期12131班级软件111一设计目的数据结构是一门实践性较强的软件基础课程为了学好这门课程必须在掌握理论知识的同时加强上机实践本课程设计的目的就是要达到理论与实际...

数据结构课程设计实验报告-

仲恺农业工程学院课程设计报告课程名称院系专业班级学号姓名指导老师计算机科学与技术计算机102班20xx10214203成筠目录题目一二算法设计包括程序流程图如函数功能入口及出口参数说明函数需求和规格说明问题描述...

《数据结构课程设计》赫夫曼编码实验报告

目录一概述1二系统分析1三概要设计2四详细设计441赫夫曼树的建立4411选择选择parent为0且权值最小的两个根结点的算法5412统计字符串中字符的种类以及各类字符的个数7413构造赫夫曼树842赫夫曼编码...

数据结构课程设计实验报告

北京理工大学珠海学院计算机学院课程设计20xx20xx学年第一学期实践教学课程名称数据结构课程实践指导教师钱峰专业班级20xx级软件工程4班教学部门计算机学院1北京理工大学珠海学院计算机学院课程设计北京理工大学...

《数据结构课程设计》赫夫曼编码实验报告

数据结构课程设计实验报告赫夫曼编码实验课程名称数据结构课程设计专业班级11级计科2班学生姓名王琦学号1140901020xx指导教师冯韵实验时间20xx年9月24日20xx至20xx学年第1学期第1至9周1目录...

数据结构课程设计报告基于无向图的校园导游系统[1]

重庆科技学院课程设计报告院系电气与信息工程学院专业班级计科普0902学生姓名周杨学号20xx441622设计地点单位计算机基础自主学习中心I306设计题目校园导游咨询完成日期20xx年1月14日指导教师评语成绩...

淮海工学院数据结构课程设计报告书——全国著名景点导游咨询

淮海工学院计算机工程学院课程设计报告设计名称:数据结构课程设计选题名称:全国著名景点导游咨询姓名:学号:专业班级:软件工程软件091系(院):计算机工程学院设计时间:20##.12.20~20##.12.31设…

数据结构课程设计实验报告 安徽大学

20xx726实验一停车场管理系统设计要求1问题描述设计一个停车场管理系统模拟停车场运作此程序具备以下功能1若车辆到达则显示汽车在停车场内或便道上的停车位置2若车辆离开则显示汽车在停车场内停留的时间和应缴纳的费...

数据结构课程设计实验报告E10914060 刘晨晨

实验一线性表逆置一问题描述分别以不同存储结构实现线性表的就地逆置线性表的就地逆置就是在原表的存储空间内将线性表a1a2a3ananan1a2a1二基本要求用顺序存储结构实现线性表的就地逆置并将结果输出三数据结构...

数据结构课程设计实验报告--177

数据结构课程设计报告姓名陈白杨班级软092老师王森玉学号099074177实验一农夫过河问题一题目农夫过河问题二问题描述从前一人农夫带着一只狼一只羊和一棵白菜注意该狼已被农夫驯服了但还是会吃羊他要将所有东西安全...

数据结构课程设计实验报告(35篇)