数据结构顺序表的基本操作实验

一、实验目的

1.熟悉顺序表基本操作顺序表的建立、插入、删除、查找

2.结构体的定义、自定义函数、宏定义

3.掌握线性表的顺序表示

4.会利用顺序表解决相关问题

二、实验任务

1.建立一个空顺序表;

2.空表中添加元素:你的身份证前10位数字,并打印输出线性表元素;

3.获取线性表中第3个元素,并打印输出该元素;

4.查找线性表中第一个与4相等的元素,并返回是否查找成功的标志或其位置;

5.在第7个位置插入一个你最喜欢的元素,并打印插入后线性表中的元素;

6.删除线性表中的第2个元素,并打印删除后线性表中的元素。

三、预习环节

1.结构体定义:

(1)struct 结构体名

{类型名 成员名1;

...

类型名 成员名n;

};

(2)struct 结构体名

{类型名 成员名1;

...

类型名 成员名n;

};

struct 结构体名 结构体变量名表;

(3)struct 结构体名

{类型名 成员名1;

...

类型名 成员名n;

};结构体变量名表

  1. 宏:宏是一种批量处理的称谓,根据一系列预定义的规则替换一定的文本模式

   替换文本可以是常量或一些字符串

   宏定义的优点是方便和易于维护。

  1. 输入: cin 是与流提取运算符>>结合使用的

          cin>>name>>age;等价于 cin>>name;cin>>age;

  1. 输出:cout 是与流插入运算符<<结合使用的

         cout<<”value of str is:”<<str<<endl;

四、实验内容

1、程序清单

#include<iostream>
using namespace std;
#define maxsize 100//默认初始化长度
#define OK 1
#define OVERFLOW 2
#define ERROR 0
typedef int Status;

typedef struct{
	int *elem;
	int length;
}SqList;



//建立一个空顺序表(动态分配)
Status InitList(SqList &L){
	L.elem=new int[maxsize];
	if(!L.elem) 
	{exit(OVERFLOW);}
	else
	{L.length=0;}
	return OK;
} 




//获取元素
Status GetElem(SqList L, int i, int &e) 
{
	if (i<1 || i>L.length)  return ERROR; 
	e=L.elem[i-1];
	return OK;
}



  
//查找
int LocateElem(SqList L,int e)//返回的是int类型
{
	int i;
	for(i=0;i<L.length;i++)
		if(L.elem[i]==e) return i+1;
	return 0;
}




//插入
Status ListInsert(SqList &L,int i,int e) 
{
	int j;
	if ((i < 1) || (i >L.length+1))  return ERROR;
	if (L.length==maxsize)	return ERROR;
	for (j=L.length-1; j>=i-1; j--)
		L.elem[j+1]=L.elem[j];
	L.elem[i-1]=e; 
	++L.length;
	return OK;
}




//删除
Status ListDelete(SqList &L, int i) 
{   
	int j;
	if ((i < 1) || (i > L.length))
		return 0; 
	for (j=i;j<=L.length-1;j++)
		L.elem[j-1] = L.elem[j]; 
	--L.length; 
	return OK;
}


//打印函数
int printlist(SqList &L)
{
	    int i;
		for(i=0;i<L.length ;i++)
		cout<<L.elem[i];
		return L.elem[i];
}









int main()
{
	SqList L;
	InitList(L);
	//建立空表
	
	int i;int e;
    L.length=10;
	cout<<"添加元素"<<endl;
	for(i=0;i<L.length;i++)
	{		
		cin>>e;
	    L.elem[i]=e;
	}
	cout<<"输出线性表元素"<<endl;
	for(i=0;i<L.length ;i++)
	{
		cout<<L.elem[i];
	}
    cout<<endl;
    //输出线性表元素


    cout<<"获取线性表中第i个元素"<<endl;
    cout<<"输入i:";
	cin>>i;
	GetElem(L,i,e);
	cout<<e<<endl;
	//获取线性表中第i个元素
	

    
    cout<<"查找第一个与x相等的元素"<<endl;
    cout<<"输入x:";
	int x;
	cin>>x;
    LocateElem(L,x);
	cout<<LocateElem(L,x)<<endl;
	//查找第一个与x相等的元素





	cout<<"在第七个位置插入元素:a"<<endl;
    cout<<"输入插入元素a:";
	int a;
	cin>>a;
	ListInsert(L,7,a);
    for(i=0;i<L.length ;i++)
	{
		cout<<L.elem[i];
	}
    cout<<endl;
    //在第七个位置插入元素:a




    cout<<"删除表中第n个元素"<<endl;
    cout<<"输入n:";
    int n;
	cin>>n;
    ListDelete(L,n);
	    for(i=0;i<L.length;i++)
	{
		cout<<L.elem[i];
	}
    //删除表中第n个元素





    cout<<"运用创新定义函数printlist打印顺序表"<<endl;
    printlist(L);



	return 0;
}

 

2、程序调试过程

  1. 在定义函数实现查找操作时,一开始不会输出位置

解决:把函数返回值int类型

  1. 注意什么时候用 引用 什么时候不用。
  2. 注意合理范围 例如:在定义函数插入操作中,i值合法范围时1<=i<=L.length+1

  • 能力提升

1.创建打印函数

//打印函数
int printlist(SqList &L)
{
	    int i;
		for(i=0;i<L.length ;i++)
		cout<<L.elem[i];
		return L.elem[i];
}

六、总结与讨论

1.心得体会

(1)熟悉顺序表基本操作顺序表的建立、插入、删除、查找

(2)学会结构体的定义、自定义函数、宏定义

(3)掌握线性表的顺序表示 会利用顺序表解决相关问题

2.总结注意点

  1. 注意什么时候用 引用 什么时候不用。在形参表中,以“&”打头的参数即为引用参数。传递引用给函数与传递指针效果一样。形参变化实参也变化。
  2. 注意函数返回值类型
  3. 数据结构的表示(存储类型)用类型定义(typedef)描述;数据元素类型约定为ElemType,由用户在使用该数据类型时自行定义
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

glitter2333

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值