数据结构:用C++编写顺序表
数据结构实验心得
-
用c++语言编写一段程序,以实现顺序表的功能:元素的插入、删除、追加。
-
实验心得:
本次的实验让我对于顺序表有了更深的理解,顺序表是通过数据元素物理存储的连续性。来反应元素之间逻辑上的相邻关系。采用顺序存储结构存储的线性表。
元素的追加只需要在尾部处增加一个地址,顺序表的长度增大一,把值赋给该地址。
元素的插入稍微复杂一点,要先判断插入的位置是否合理,后面的元素都需要往后移一位,长度加一。
元素的删除,首先要判断删除的位置上是否有元素,有的话就删除,后面的元素都需要往前移一位。
实验课带来的好处就是走出课本,真真正正的接触代码,有了实践性的效果。 -
我的编程思想
核心部分:
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);
}