用C++编写线性表

数据结构:用C++编写顺序表

数据结构实验心得

  1. 用c++语言编写一段程序,以实现顺序表的功能:元素的插入、删除、追加。

  2. 实验心得:
    本次的实验让我对于顺序表有了更深的理解,顺序表是通过数据元素物理存储的连续性。来反应元素之间逻辑上的相邻关系。采用顺序存储结构存储的线性表。
    元素的追加只需要在尾部处增加一个地址,顺序表的长度增大一,把值赋给该地址。
    元素的插入稍微复杂一点,要先判断插入的位置是否合理,后面的元素都需要往后移一位,长度加一。
    元素的删除,首先要判断删除的位置上是否有元素,有的话就删除,后面的元素都需要往前移一位。
    实验课带来的好处就是走出课本,真真正正的接触代码,有了实践性的效果。

  3. 我的编程思想

    核心部分:
    
typedef struct A
		{
		int * pA ;//存放地址
		int max;//表的最大长度
		int size;
		} S;
==利用c++语言中的结构体,将顺序表中的不同类型集中起来,统一类型。
	有利于处理不同数据类型的变量。==

 顺序表的初始化:

void csh(S & pArr,int max)//初始化顺序表
{
pArr.pA = new int[max];
if(!pArr.pA)
exit(-1); //非正常退出
pArr.max=max;
pArr.size=0;
}

 判断顺序表是否为空还是满

bool isempty(S & pArr)
{
	if(0==pArr.size){
		return true;
	}
	else{
		return false;}
}
bool isfull(S & pArr)
{
if(pArr.max==pArr.size)
return true;
else
return false;
}

 元素的追加

bool append(S & pArr,int val)//尾部添加数据
{
if(isfull(pArr))
return false;
else
{
pArr.pA[pArr.size++]=val;
return true;
}
}

 元素的插入

bool insert(S & pArr,int pos,int val)
{
if(isfull(pArr))
return false;
if(pos<1||pos>pArr.size+1)
return false;
if(pos<=pArr.size)
{
	for(int i=pArr.size-1; i>=pos-1; i--)
	{
		pArr.pA[i+1]=pArr.pA[i];
	}
}
pArr.pA[pos-1]=val;
pArr.size++;
return true;
}

 元素的删除:

bool Delete(S & pArr,int pos)
{
if(isempty(pArr))
return false;
if(pos<0||pos>pArr.size)
return false;
for(int i=pos; i<pArr.size; i++)
{
	pArr.pA[i-1]=pArr.pA[i];
}
pArr.size--;
return true;
}

源代码如下:

#include<iostream>
#include<stdlib.h>
using namespace std;

typedef struct A
{
int * pA ;//存放地址
int max;//表的最大长度
int size;
} S;

void csh(S & pArr,int max);//新建顺序表
bool append(S & pArr,int val);//往顺序表中追加元素
bool isempty(S & pArr);//判断顺序表是否为空
bool isfull(S & pArr);//判断顺序表是否为满
bool insert(S & pArr,int pos,int val);//在指定位置插入一个元素
void show(S & pArr);//遍历整个顺序表
bool Delete(S & pArr,int pos);//删除顺序表指定位置的元素
bool xh(S & pArr);//销毁顺序表

void csh(S & pArr,int max)//初始化顺序表
{
pArr.pA = new int[max];
if(!pArr.pA)
exit(-1); //非正常退出
pArr.max=max;
pArr.size=0;
}

bool isempty(S & pArr)
{
	if(0==pArr.size){
		return true;
	}
	else{
		return false;}

}

bool isfull(S & pArr)
{
if(pArr.max==pArr.size)
return true;
else
return false;
}

void show(S & pArr)
{
if(isempty(pArr))
cout<<"顺序表为空!!"<<endl;
else
{
for(int i=0; i<pArr.size; i++)
{
cout<<pArr.pA[i]<<" ";
}
cout<<endl;
}
}

bool append(S & pArr,int val)//尾部添加数据
{
if(isfull(pArr))
return false;
else
{
pArr.pA[pArr.size++]=val;
return true;
}
}

bool insert(S & pArr,int pos,int val)
{
if(isfull(pArr))
return false;
if(pos<1||pos>pArr.size+1)
return false;
if(pos<=pArr.size)
{
	for(int i=pArr.size-1; i>=pos-1; i--)
	{
		pArr.pA[i+1]=pArr.pA[i];
	}
}
pArr.pA[pos-1]=val;
pArr.size++;
return true;
}

bool Delete(S & pArr,int pos)
{
if(isempty(pArr))
return false;
if(pos<0||pos>pArr.size)
return false;
for(int i=pos; i<pArr.size; i++)
{
	pArr.pA[i-1]=pArr.pA[i];
}
pArr.size--;
return true;
}

bool xh(S & pArr)
{
if(pArr.pA==NULL)
return false;
delete pArr.pA;
pArr.pA=NULL;
return true;
}

void main(){
S ArrayList;
csh(ArrayList,10);
int a[10];

cout<<"请按顺序依次输入5个数"<<endl;
cin>>a[0]>>a[1]>>a[2]>>a[3]>>a[4];
for(int i=0;i<=4;i++){
append(ArrayList,a[i]);
}

cout<<"顺序表的5个数如下"<<endl;
show(ArrayList);
int aa;
int bb;
cout<<"请输入需要插入的位置"<<endl;
cin>>aa;
cout<<"请输入需要插入的元素"<<endl;
cin>>bb;
insert(ArrayList,aa,bb);
show(ArrayList);

cout<<"请输入需要删除的元素的位置"<<endl;
cin>>aa;
Delete(ArrayList,aa);
show(ArrayList);

}
  • 16
    点赞
  • 46
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值