实验1:线性表的基本操作实现及其应用

本文介绍了一个关于线性表基本操作实现及应用的教学实验。实验包括了线性表的建立、输出、插入、删除和查找等操作,并通过C++语言进行实现。此外,还提供了完整的代码示例和运行结果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

实验一:线性表的基本操作实现及其应用

一、实验目的

1、   熟练掌握线性表的结构特点,掌握顺序表的基本操作。

2、   巩固C++相关的程序设计方法与技术。

3、   学会使用顺序表解决实际问题。

二、实验内容

1、顺序表的建立与操作实现

建立n个元素的顺序表(n的大小和表里数据自己确定),实现相关的操作:输出,插

入,删除,查找等功能。编写完整程序实现,程序语言不限定,使用技术形式不定。

2、实际问题的解决(*选做

使用顺序表来实现约瑟夫环问题。

 

实验代码 :

#ifndef SeqList_H   //避免重复包含SeqList.h头文件

#define SeqList_H

const int MaxSize=10;   //线性表最多有10个元素

class SeqList

{

public:

         SeqList(){length=0;}   //无参考构造函数,构建一个空表

         SeqList(inta[],int n);   //有参构造函数

         ~SeqList(){};   //析构函数

         voidInsert(int i,int x);   //在线性表第i个位置插入值为x的元素

         intDelete(int i);  //删除线性表的第i个函数

         intLocate(int x);  //求线性表中值为x的元素序号

         voidPrintList();   //按序号依次输出各个元素

private:

         intdata[MaxSize];  //存放数据元素的数组

         intlength;

};

#endif

 

#include<iostream>   //引入输入输出流

using namespace std;

#include"SeqList.h"    //引入输入输出流

                      //以下是类SeqList的成员函数定义

 

 

SeqList::SeqList(int a[],int n)

{

 if(n>MaxSize)throw"参数非法";

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

           data[i]=a[i];

 length=n;

}

 

 

void SeqList::Insert(int i,int x)

{

         if(length>MaxSize)throw"上溢";

         if(i<1||i>length+1)throw"位置非法";

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

                  data[j]=data[j-1];   //j个元素存放在数据下标为j-1

         data[i-1]=x;

         length++;

}

 

 

int SeqList::Delete(int i)

{

         if(length==0)throw"下溢";

         if(i<1||i>length)throw"位置非法";

         intx=data[i-1];

         for(intj=i;j<length;j++)

                  data[j-1]=data[j];   //此处j已经是元素所在的数组下标

         length--;

         returnx;

}

 

 

int SeqList::Locate(int x)

{

         for(inti=0;i<length;i++)

                  if(data[i]==x) return i+1;  //下标为i的元素其序号为i+1

                  return0;   //查找失败,退出循环

}

 

 

void SeqList::PrintList()

{

         for(inti=0;i<length;i++)

                  cout<<data[i]<<"";

         cout<<endl;

}

 

 

 

#include<iostream>  //引入输入输出流

using namespace std;

#include"SeqList.h"   //引入输入输出流

 

 

void main()

{

         intr[5]={1,2,3,4,5};

         SeqListL(r,5);

         cout<<"执行插入操作前数据为:"<<endl;

         L.PrintList();   //输出所有元素

         try

         {

                  L.Insert(2,3)   //在第2个位置插入值为3的元素

         }

         catch(char*s)

         {

                  cout<<s<<endl;

         }

         cout<<"执行插入操作后数据为:"<<endl;

         L.PrintList();   //输出所有元素

         cout<<"值为3的元素位置为:";

         cout<<L.Locate(3)<<endl;   //查找元素3,并返回在顺序表中位置

         cout<<"执行删除第一个元素操作,删除前数据为:"<<endl

   L.PrintList();   //输出所有元素

         try

         {

                  L.Delete(1);   //删除第1个元素

         }

         catch(char*s)

         {

                  cout<<s<<endl;

         }

         cout<<""<<endl;

         L.PrintList();    //输出所有元素

}

 

 

运行结果:

 

实验线性表及其应用 一、 实验目的和要求 1、掌握线性表的插入、删除、查找等基本操作设计与实现 2、学习利用线性表提供的接口去求解实际问题 3、熟悉线性表的的存储方法 二、 实验内容和原理 1实验内容:设计一个一元多项式的简单计算器,其基本功能有①输入并建立多项式;②输出多项式;③多项式相加。可利用单链表或单循环链表实现之。 2、实验原理:以线性表来描述一元多项式,存储结构采用单链表,每个结点存储的多项式中某一项的系数和指数,建立单链表时指数高的结点列于指数低的 结点之后,即线性表的元素按指数递增有序排列。 三、 实验环境 Visual C++ 6.0 及PC机 四、 算法描述及实验步骤 思想算法: 以线性表来描述一元多项式,存储结构采用单链表,每个结点存储的多项式中某一项的系数和指数,建立单链表时指数高的结点列于指数低的结点之后,即线性表的元素按指数递增有序排列。 例如构造两个多项式ha: 5X3+4X2+3X+2 hb: X2+X+1 多项式加法:定义指针p,q分别指向ha,hb i.p->exp==q->exp ,r->coef=p->coef+q->coef,pa,pb下移; ii.p->expexp ,r->coef=q->coef;r->exp=q->exp;,q下移 iii.pa->exp>pb->exp, r->exp=p->exp;r->coef=p->coef;,p下移 iv.p!=NULL,pb==NULL.相当于iii. V.q==NULL,pb!=NULL.相当于ii. 其流程图如下: 多项式乘法:定义指针fp,gp分别指向f,g 1.将两多项式最大指数相加并赋于maxp,并置g 2.用for循环求指数等于maxp时相乘的系数 3. (fp!=NULL)&&(gp!=NULL), p=fp->exp+gp->exp 1.p>maxp, fp=fp->next; 2. pnext; 3.p=maxp, x+=fp->coef*gp->coef; fp=fp->next;gp=gp->next; 五、 实验结果 1.分别输入两个多项式: 5X3+4X2+3X+2 和X2+X+1,然后输出结果如下: 2.分别输入两个多项式:6X4+4X2+2和5X+6,然后输出结果如下: 六、 总结 此次上机实验应用线性表实现了一次实际操作,完成了一个一元多项式的简单计算器,不仅对此次编译程序的算法思想有了新的认识,还让我深刻的体会到了线性表的重要性以及其应用的方便,并且对指针加深了映象,应用了书本中的算法思想,对我以后的编译以及完成新的程序有很大的帮助。 附录: 1.建立多项式列表代码如下: mulpoly *creatpoly()/*建立多项式列表*/ {mulpoly *head,*r,*s;/*设中间变量*/ int m,n; head=(mulpoly *)malloc(sizeof(mulpoly));/*头结点申请空间*/ printf("\ninput coef and exp:\n"); scanf("%d%d",&n,&m);/*输入多项式系数和指数*/ r=head;/*尾指针指向头指针*/ while(n!=0)/*将输入的多项式存放在S中*/ {s=(mulpoly*)malloc(sizeof(mulpoly)); s->coef=n; s->exp=m; r->next=s; r=s; /*printf("input coef and exp:\n");*/ scanf("%d%d",&n,&m);/*再次输入多项式系数和指数*/ } r->next=NULL;/*将尾指针置空*/ head=head->next;/*将head哑结点向前跑一个结点,使其不为空*/ return (head);/*返回多项式*/ } 2.两个多项式相加代码如下: mulpoly *polyadd(mulpoly *ha,mulpoly *hb)/*两个多项式相加*/ {mulpoly *hc,*p,*q,*s,*r;/*声明结构体型*/ int x; p=ha; q=hb; hc=(mulpoly *)malloc(sizeof(mulpoly));/*申请结点空间*/ s=hc; while((p!=NULL)&&(q!=NULL))/*两多项式不为空*/
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值