顺序表的c++实现(参考浙大数据结构公开课)

/*顺序线性表的c++实现与测试*/
#include<iostream>
using namespace std;
/*数组空间大小*/
#define MAXSIZE 2
typedef int ElementType;
/*定义一个指向结构体LNode的指针的数据类型*/
typedef struct LNode *List;
/*定义Lnode结构体来表示线性表*/
struct LNode{
ElementType Data[MAXSIZE];
int last;/*线性表元素下标*/
};
/*生成一个空线性表*/
List MakeEmpty(){
List Ptrl;
Ptrl=(List)malloc(sizeof(struct LNode));/*为线性表分配内存空间*/
Ptrl->last=-1;/*线性表长度为零*/
return Ptrl;
}
/*在一个给定线性表中查找一个给定数值*/
int Find(ElementType x,List Ptrl){
int i=0;
while(i<=Ptrl->last&&Ptrl->Data[i]!=x)/*没找完整个表或找到给定值继续循环*/
i++;
if(i>Ptrl->last) return -1;/*在表中找不到给定值*/
else return i;/*找到给定值*/
}
/*在给定线性表的指定位置插入一个元素*/
void Insert(ElementType x,int i,List Ptrl){
int j;
 if ( Ptrl->last == MAXSIZE-1){
cout<<"满了"<<endl;
return;
}/*线性表已满,无法插入*/
if(i<1||i>Ptrl->last+2){
cout<<"不合法"<<endl;
return;
}/*插入位置不合法*/
for(j=Ptrl->last;j>=i-1;j--)
Ptrl->Data[j+1]=Ptrl->Data[j];/*给定位置后面的元素依次后移一个位置*/
Ptrl->Data[i-1]=x;/*给定位置插入数值*/
Ptrl->last++;/*线性表长度加一*/
return;
}
/*给定线性表中删除指定位置的元素*/
void Del(int i,List Ptrl){
int j;
if(Ptrl->last==-1){
cout<<"空的"<<endl;
return;
}/*线性表为空*/
if(i<1||i>Ptrl->last+1){
cout<<"不合法"<<endl;
return;
}/*删除未知不合法,注意,顺序表的删除位置比插入位置少一个*/
for(j=i-1;j<=Ptrl->last;j++)
Ptrl->Data[j]=Ptrl->Data[j+1];/*元素前移*/
Ptrl->last--;/*长度减一*/
return;
}
/*主函数测试算法是否正确*/
int main(){
List L;
int v[3];
int k;
L=MakeEmpty();/*创建空顺序表*/
for(k=0;k<3;k++){
cin>>v[k];
Insert(v[k],k,L);
}/*依次插入三个元素,其中最后一个不合法*/
Find(5,L);/*查找值定数值*/
Del(1,L);/*删除一个元素*/
return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
使用c++实现顺序表:多文件编程,层次清晰,函数有注释 SeqList();//构造函数,存储的元素个数设为0 bool setLength(size_t length);//设置已经存储的元素个数 bool addElement(ElemType element);//把某个元素添加到顺序表末尾 bool addElement(ElemType element , size_t n);//插入一个元素,使其成为第n个元素,其余元素后移 bool delElement();//删除所有的元素 bool delElement(size_t n);//删除第n个元素 bool delElement(string elementDetailType,string elementDetail);//通过某个元素细节找到元素,把这个元素删除 bool replaceElement(ElemType element , size_t n);//使用一个元素,替换掉第n个元素 bool swapElement(size_t n1 , size_t n2);//把第n1个元素和第n2个元素交换 ElemType* getElement();//得到数组头的指针 ElemType* getElement(size_t n);//得到第n个元素的指针 size_t getLength();//得到存储的元素个数 size_t getMaxSize();//得到顺序表容量 bool showElementDetail();//输出所有的元素细节 bool showElementDetail(size_t n);//输出第n个元素的细节 bool showElementDetail(string elementDetailType,string elementDetail);//通过某个元素细节找到元素,输出元素所有细节 size_t findElement(string elementDetailType,string elementDetail);//通过某个元素细节找到元素位置 static int inputAInt(int min = 0,int max = 9,int defaultValue = -1);//从键盘读取,限制为一个min到max间的整数,非法情况返回defaultValue void startControlLoop();//打开控制界面 ~SeqList();//析构函数
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值