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

本文介绍了一种使用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;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值