数据结构——顺序表(SqList)
顺序表
//顺序表
typedef struct{
int data[MaxSize];
int length;
}SqList;
操作:初始化,插入,删除,查找
1.初始化
//初始化
void InitList(SqList &L){
L.length=0;
}
2.插入
//在第i个位置插入元素e
bool ListInsert(SqList &L,int i,int e){
//保证插入位置合法
if(i<1 || i>L.length+1)
return false;
//保证数组长度不超过存储空间
if(L.length >= MaxSize)
return false;
//将第i个元素及其后面所有元素全部后移一位
for(int j=L.length;j>=i;j--){
L.data[j]=L.data[j-1];
}
L.data[i-1]=e;
L.length++;
return true;
}
3.删除
//将第i个位置元素删除,同时用e接收它的值
bool ListDelete(SqList &L,int i,int &e){
if(i<1 || i>L.length )
return false;
//用e接收第i个位置元素的值
e=L.data[i-1];
//将第i个元素后面所有元素全部前移一位
for(int j=i;j<=L.length;j++){
L.data[j-1]=L.data[j];
}
L.length--;
return true;
}
4.查找
4.1按值查找
//按值查找
int LocateElem(SqList L,int e){
for(int i=0;i<L.length;i++){
if(L.data[i]==e){
return i+1;
}
}
return 0;
}
4.2按位置查找
//按位置查找
int GetElem(SqList L,int i){
if(i<1 || i>L.length)
return 0;
return L.data[i-1];
}
测试
int main(){
SqList L;
//初始化
InitList(L);
//插入
for(int i=1;i<=10;i++){
ListInsert(L,i,i);
printf("L.data[%d]=%d \n",i-1,i);
}
puts("");
//删除
int e=-1;
if(ListDelete(L,5,e)){
printf("成功删除第5个元素删除,值为%d \n",e);
}
else{
printf("删除失败 \n");
}
puts("");
printf("删除之后,顺序表为: \n");
for(int i=1;i<=L.length;i++){
printf("L.data[%d]=%d \n",i-1,i);
}
}
完整代码
#include<stdio.h>
#define MaxSize 10
//顺序表
typedef struct{
int data[MaxSize];
int length;
}SqList;
//初始化
void InitList(SqList &L){
L.length=0;
}
//在第i个位置插入元素e
bool ListInsert(SqList &L,int i,int e){
//保证插入位置合法
if(i<1 || i>L.length+1)
return false;
//保证数组长度不超过存储空间
if(L.length >= MaxSize)
return false;
//将第i个元素及其后面所有元素全部后移一位
for(int j=L.length;j>=i;j--){
L.data[j]=L.data[j-1];
}
L.data[i-1]=e;
L.length++;
return true;
}
//将第i个位置元素删除,同时用e接收它的值
bool ListDelete(SqList &L,int i,int &e){
if(i<1 || i>L.length )
return false;
//用e接收第i个位置元素的值
e=L.data[i-1];
//将第i个元素后面所有元素全部前移一位
for(int j=i;j<=L.length;j++){
L.data[j-1]=L.data[j];
}
L.length--;
return true;
}
//按值查找
int LocateElem(SqList L,int e){
for(int i=0;i<L.length;i++){
if(L.data[i]==e){
return i+1;
}
}
return 0;
}
//按位置查找
int GetElem(SqList L,int i){
if(i<1 || i>L.length)
return 0;
return L.data[i-1];
}
int main(){
SqList L;
//初始化
InitList(L);
//插入
for(int i=1;i<=10;i++){
ListInsert(L,i,i);
printf("L.data[%d]=%d \n",i-1,i);
}
puts("");
//删除
int e=-1;
if(ListDelete(L,5,e)){
printf("成功删除第5个元素删除,值为%d \n",e);
}
else{
printf("删除失败 \n");
}
puts("");
printf("删除之后,顺序表为: \n");
for(int i=1;i<=L.length;i++){
printf("L.data[%d]=%d \n",i-1,i);
}
}