数据结构与算法实验报告(线性表)

时间:2024.4.21

一、实验目的

1、深刻理解线性结构的特点以及线性表的概念。

2、熟练掌握线性表的顺序存储结构、链式存储结构及基本运算算法的实现,特别是查找、插入和删除等算法。

二、实验环境

1) 硬件:每个学生需配备计算机一台,操作系统:Windows2000/XP。

2) 软件:visual c++6.0。

三、实验题目和实验内容

实验题目:线性表的顺序、链式表示及其应用

实验内容:

1、基本题:实验2.1、实验2.2、实验2. 4、实验2.7

2、附加题:实验2.3、实验2.6(没做)

四、实验数据和实验结果

2.1

a,b,c,d,e

2.2

    a,b,c,d,e

2.4

a,b,c,d,e

2.7

第一个多项式:2x+6x^2-4x^3+3x^4 第二个多项式1x-3x^2+6x^3-3x^4

五、附录(程序代码)

2.1

#include<iostream.h>

#include<malloc.h>

#define MaxSize 50

typedef struct

{

       char data[MaxSize];

       int length;

}SqList;

void CreateList(SqList *&L,char a[],int n)

{

       int i;

       L=(SqList *)malloc(sizeof(SqList));

       for(i=0;i<n;i++)

              L->data[i]=a[i];

       L->length=n;

}

void InitList(SqList *&L)

{

       L=(SqList *)malloc(sizeof(SqList));

       L->length=0;

}

void DestroyList(SqList *&L)

{

       free(L);

}

int ListEmpty(SqList *L)

{

       return (L->length==0);

}

int ListLength(SqList *L)

{

       return (L->length);

}

void DispList(SqList *L)

{

       int i;

       for(i=0;i<L->length;i++)

              cout<<L->data[i];

       cout<<endl;

}

char GetElem(SqList *L,int i,char &e)

{

       if(i<1||i>L->length)

              return 0;

       e=L->data[i-1];

       return e;

}

int LocateElem(SqList *L,char e)

{

       int i=0;

       while(i<L->length&&L->data[i]!=e)

              i++;

       if(i>=L->length)

              return 0;

       else

              return i+1;

}

int ListInsert(SqList*&L,int i,char e)

{

       int j;

       if(i<1||i>L->length+1)

              return 0;

       i--;

       for(j=L->length;j>i;j--)

              L->data[j]=L->data[j-1];

       L->data[i]=e;

       L->length++;

       return 1;

}

int ListDelete(SqList *&L,int i,char &e)

{

       int j;

       if(i<1||i>L->length)

              return 0;

       i--;

       e=L->data[i];

       for(j=i;j<L->length-1;j++)

              L->length--;

       return 1;

}

void main ()

{

       SqList *p;

       char b[10],e;

       int k;

       cout<<"元素个数:";

    cin>>k;

       cout<<"输入元素:";

       for(int m=0;m<k;m++)

              cin>>b[m];

      InitList(p);

       CreateList(p,b,k);

       cout<<"输出顺序表:";

       DispList(p);

       cout<<"顺序表长度是:"<<ListLength(p)<<endl;

       if(ListEmpty(p))

              cout<<"顺序表为空"<<endl;

       else

              cout<<"顺序表不为空"<<endl;

       cout<<"顺序表第3位元素是:"<<GetElem(p,3,e)<<endl;

       cout<<"元素a的位置是:"<<LocateElem(p,'a')<<""<<endl;

       ListInsert(p,4,'f');

       cout<<"在第4个元素上插入元素f:";

       DispList(p);

       cout<<"删除顺序表第3个元素:";

       ListDelete(p,3,e);

       DispList(p);

       DestroyList(p);

}

2.2

#include<iostream.h>

#include<malloc.h>

typedef struct LNode

{

       char data;

       struct LNode *next;

}LinkList;

void CreateListR(LinkList *&L,char a[],int n)

{

       LinkList *s,*r;

       int i;

       L=(LinkList *)malloc(sizeof(LinkList));

       r=L;

       for(i=0;i<n;i++)

       {

              s=(LinkList *)malloc(sizeof(LinkList));

              s->data=a[i];

              r->next=s;

              r=s;

       }

       r->next=NULL;

}

void InitList(LinkList *&L)

{

       L=(LinkList *)malloc(sizeof(LinkList));

       L->next=NULL;

}

void DestroyList(LinkList *&L)

{

       LinkList *pre=L,*p=pre->next;

       while(p)

       {

              free(pre);

              pre=p;

              p=pre->next;

       }

       free(pre);

}

int ListEmpty(LinkList *L)

{

       return(L->next==NULL);

}

int ListLength(LinkList *L)

{

       int n=0;

       LinkList *p=L;

       while(p->next)

       {

              n++;

              p=p->next;

       }

       return(n);

}

void DispList(LinkList *L)

{

       LinkList *p=L->next;

       while(p)

       {

              cout<<p->data;

              p=p->next;

       }

       cout<<endl;

}

char GetElem(LinkList *L,int i,char &e)

{

       int j=0;

       LinkList *p=L;

       while(j<i&&p!=NULL)

       {

              j++;

              p=p->next;

       }

       if(!p)

              return 0;

       else

       {

              e=p->data;

              return e;

       }

}

int LocateElem(LinkList *L,char e)

{

       int i=1;

       LinkList *p=L->next;

       while(p&&p->data!=e)

       {

              p=p->next;

              i++;

       }

       if(!p)

              return(0);

       else

              return(i);

}

int ListInsert(LinkList *&L,int i,char e)

{

       int j=0;

       LinkList *p=L,*s;

       while(j<i-1&&p)

       {

              j++;

              p=p->next;

       }

       if(!p)

              return 0;

       else

       {

              s=(LinkList *)malloc(sizeof(LinkList));

              s->data=e;

              s->next=p->next;

              p->next=s;

              return 1;

       }

}

int ListDelete(LinkList *&L,int i,char &e)

{

       int j=0;

       LinkList *p=L,*q;

       while(j<i-1&&p)

       {

              j++;

              p=p->next;

       }

       if(!p)

              return 0;

       else

       {

              q=p->next;

              if(!q)

                     return 0;

              e=q->data;

              p->next=q->next;

              free(q);

              return 1;

       }

}

void main()

{

       LinkList *h;

       char b[10],e;

       int k;

       cout<<"元素个数:";

    cin>>k;

       cout<<"输入元素:";

       for(int m=0;m<k;m++)

              cin>>b[m];

       InitList(h);

       CreateListR(h,b,k);

       cout<<"输出单链表:";

       DispList(h);

       cout<<"单链表长度是:"<<ListLength(h)<<endl;

       if(ListEmpty(h))

              cout<<"单链表为空"<<endl;

       else

              cout<<"单链表不为空"<<endl;

       cout<<"单链表第3位元素是:"<<GetElem(h,3,e)<<endl;

       cout<<"元素a的位置是:"<<LocateElem(h,'a')<<""<<endl;

       ListInsert(h,4,'f');

       cout<<"在第4个元素上插入元素f:";

       DispList(h);

       cout<<"删除单链表第3个元素:";

       ListDelete(h,3,e);

       DispList(h);

       DestroyList(h);

}

2.4

#include<iostream.h>

#include<malloc.h>

typedef struct LNode

{

       char data;

       struct LNode *next;

}LinkList;

void CreateListR(LinkList *&L,char a[],int n)

{

       LinkList *s,*r;

       int i;

       L=(LinkList *)malloc(sizeof(LinkList));

       r=L;

       for(i=0;i<n;i++)

       {

              s=(LinkList *)malloc(sizeof(LinkList));

              s->data=a[i];

              r->next=s;

              r=s;

       }

       r->next=L;

}

void InitList(LinkList *&L)

{

       L=(LinkList *)malloc(sizeof(LinkList));

       L->next=NULL;

}

void DestroyList(LinkList *&L)

{

       LinkList *pre=L->next,*p=pre->next;

       L->next=NULL;

       while(p)

       {

              free(pre);

              pre=p;

              p=pre->next;

       }

       free(pre);

}

int ListEmpty(LinkList *L)

{

       return(L->next==NULL);

}

int ListLength(LinkList *L)

{

       int n=0;

       LinkList *p=L;

       while(p->next!=L&&p->next)

       {

              n++;

              p=p->next;

       }

       return(n);

}

void DispList(LinkList *L)

{

       LinkList *p=L->next;

       while(p!=L&&p)

       {

              cout<<p->data;

              p=p->next;

       }

       cout<<endl;

}

char GetElem(LinkList *L,int i,char &e)

{

       int j=1;

       LinkList *p=L->next;

       while(j<i&&p!=L&&p)

       {

              j++;

              p=p->next;

       }

       if(!p)

              return 0;

       else

       {

              e=p->data;

              return e;

       }

}

int LocateElem(LinkList *L,char e)

{

       int i=1;

       LinkList *p=L->next;

       while(p!=L&&p->data!=e&&p)

       {

              p=p->next;

              i++;

       }

       if(!p)

              return(0);

       else

              return(i);

}

int ListInsert(LinkList *&L,int i,char e)

{

       int j=1;

       LinkList *p=L->next,*s;

       while(j<i-1&&p&&p!=L)

       {

              j++;

              p=p->next;

       }

       if(!p)

              return 0;

       else

       {

              s=(LinkList *)malloc(sizeof(LinkList));

              s->data=e;

              s->next=p->next;

              p->next=s;

              return 1;

       }

}

int ListDelete(LinkList *&L,int i,char &e)

{

       int j=1;

       LinkList *p=L->next,*q;

       while(j<i-1&&p&&p!=L)

       {

              j++;

              p=p->next;

       }

       if(!p)

              return 0;

       else

       {

              q=p->next;

              if(!q||q==L->next)

                     return 0;

              e=q->data;

              p->next=q->next;

              free(q);

              return 1;

       }

}

void main()

{

       LinkList *h;

       char b[10],e;

       int k;

       cout<<"元素个数:";

    cin>>k;

       cout<<"输入元素:";

       for(int m=0;m<k;m++)

              cin>>b[m];

       InitList(h);

       CreateListR(h,b,k);

       cout<<"输出循环单链表:";

       DispList(h);

       cout<<"循环单链表长度是:"<<ListLength(h)<<endl;

       if(ListEmpty(h))

              cout<<"循环单链表为空"<<endl;

       else

              cout<<"循环单链表不为空"<<endl;

       cout<<"循环单链表第3位元素是:"<<GetElem(h,3,e)<<endl;

       cout<<"元素a的位置是:"<<LocateElem(h,'a')<<""<<endl;

       ListInsert(h,4,'f');

       cout<<"在第4个元素上插入元素f:";

       DispList(h);

       cout<<"删除循环单链表第3个元素:";

       ListDelete(h,3,e);

       DispList(h);

       DestroyList(h);

}

   

2.7

#include<iostream.h>

#include<malloc.h>

typedef struct  polynomial

{

       int coef;                //系数

       int index;               //指数

       struct polynomial *next;

}LinkList;

void CreateList(LinkList *&L, int n) 

    LinkList *s,*r; 

    int i;

       L=(LinkList *)malloc(sizeof(LinkList));

    r=L; 

    for(i=0;i<n;i++) 

    { 

        s=(LinkList*)malloc(sizeof(LinkList)); 

        cout<<"依次输入多项式系数和指数:"; 

        cin>>s->coef>>s->index; 

        s->next = NULL; 

        r->next=s;

              r=s;

    } 

void InitList(LinkList *&L)

{

       L=(LinkList *)malloc(sizeof(LinkList));

       L->next=NULL;

}

void AddList(LinkList *&list1,LinkList *&list2,int m,int n)

{

       LinkList *s,*r,*t;

       int i;

       s=list1->next;

       r=list2->next;

       t=list1;

       for(i=0;i<n;i++)

       {

              if(s==NULL)

              {

                     s=list1->next;

                     t=list1;

              }

              while(s!=NULL)

              {

                     if(s->index!=r->index)

                     {

                            s=s->next;

                            t=t->next;

                     }

                     else break;

              }

              if(!s)

              {

                     s=(LinkList*)malloc(sizeof(LinkList));

                     s->coef=r->coef;

                     s->index=r->index;

                     s->next=NULL;

                     t->next=s;

                     s=s->next;

                     r=r->next;

                     continue;

              }

              else

              {

                     if(s->index==r->index)

                     s->coef=s->coef+r->coef;

                     if(s->coef==0)

                     {

                            LinkList *temp1;

                            temp1=s;

                            s=s->next;

                            t->next=s;

                            delete temp1;

                     }

              }

              r=r->next;

              s=NULL;

       }

       cout<<"多项式相加的结果是:";

       list1=list1->next;

       while(list1)

       {

              cout<<list1->coef<<"x^"<<list1->index;

              if(list1->next!=NULL)

                     cout<<"+";

              list1=list1->next;

       }

}

void DispList(LinkList *L)

{

       L=L->next;

       while(L)

       {

              cout<<L->coef<<"x^"<<L->index;

              if(L->next!=NULL)

                     if(L->next->coef>0)

                            cout<<"+";

              L=L->next;

       }

}

void main()

{

       LinkList *list1,*list2;

       InitList(list1);

       InitList(list2);

       int m,n;

       cout<<"请输入第一个多项式的项数:";

       cin>>m;

       CreateList(list1,m);

       cout<<"多项式表示是:";

       DispList(list1);

       cout<<endl;

       cout<<"请输入第二个多项式的项数:";

       cin>>n;

       CreateList(list2,n);

       cout<<"多项式表示是:";

       DispList(list2);

       cout<<endl;

       AddList(list1,list2,m,n);

       cout<<endl;

}

更多相关推荐:
数据结构 线性表操作实验报告

数据结构实验报告实验题目线性表的操作实验目的1掌握上机调试线性表的基本方法2掌握线性表的一些基本操作实验内容将两个有序链表合并为一个有序链表一需求分析1实验程序中先创建两个有序链表演示程序以用户和计算机的对话方...

数据结构线性表试验报告

线性表上机实习1实验目的1熟悉将算法转换为程序代码的过程2了解顺序表的逻辑结构特性熟练掌握顺序表存储结构的C语言描述方法3熟练掌握顺序表的基本运算查找插入删除等掌握顺序表的随机存取特性4了解线性表的链式存储结构...

数据结构线性表实验报告

《数据结构》实验报告院系应用科技学院专业电子信息工程姓名##学号10级电信班20##年10月11日1.实验目的1.掌握线性表的基本运算。2.掌握顺序村存储的概念,学会对顺序存储数据结构进行操作。3.加深对顺序存…

数据结构--实验报告 线性表的基本操作

一实验目的二实验内容和要求三源代码1顺序表的代码2单链表的代码四测试结果1顺序表的测试结果2单链表的测试结果五心得体会实验一线性表的基本操作及其应用一实验目的1帮助读者复习C语言程序设计中的知识2熟悉线性表的逻...

数据结构实验报告 线性表的顺序表示和实现

数学与计算科学学院实验报告实验项目名称线性表的顺序表示和实现所属课程名称数据结构A实验类型验证性实验日期20xx年4月5号班级信管1002班学号20xx44070218姓名张松涛成绩1234附录1源程序5678...

数据结构实验报告三线性表的链式存储

实验报告三线性表的链式存储班级20xxXXX姓名HoogLe学号20xxXXXX专业XXXX2858505197qqcom一实验目的1掌握单链表的基本操作的实现方法2掌握循环单链表的基本操作实现3掌握两有序链表...

数据结构线性表实验报告

浙江万里学院实验报告专业班级计算机111实验小组第十组实验日期20xx921

数据结构--线性表实验

上机实验报告实验1线性表实验内容说明实验目的和内容采用顺序表和链表实现通讯录储存并使用文件写入和读取通信录数据程序设计说明程序功能设计思路算法说明通过对话框读取姓名和电话并将其储存在单链表或顺序表中创建一个文件...

北邮数据结构实验一线性表及源代码

数据结构实验报告实验名称实验一线性表学生姓名SECRET班级SECRET班内序号SECRET学号SECRET日期20xx年5月20日1实验要求根据线性表的抽象数据类型的定义选择下面任一种链式结构实现线性表并完成...

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

数据结构课程实验报告专业指导老师班级姓名学号完成日期一实验目的1掌握线性表的顺序存储结构和链式存储结构2熟练掌握顺序表和链表基本算法的实现3掌握利用线性表数据结构解决实际问题的方法和基本技巧4按照实验题目要求独...

数据结构上机报告 实验一、线性表操作

河南城建学院计算机科学与工程学院数据结构实验报告实验名称实验一线性表操作一成绩专业班级姓名学号实验日期20xx年月日一实验目的1掌握用CC语言调试程序的基本方法2掌握线性表的基本运算如插入删除等二实验内容线性表...

湖大数据结构实验7自组织线性表实验报告

HUNANUNIVERSITY课程实验报告题目自组织线性表学生姓名学生学号专业班级指导老师完成日期一需求分析输入形式本程序可从文件中读入一个或多个汉字句子并用自组织线性表保存然后从另外一个文件中依次读入要查找的...

数据结构线性表实验报告(35篇)