顺序表基本实现-插入删除查找

书本上的代码实现

#include <stdio.h> //输出 
#include <cstdlib> //为了exit
#define MAXSIZE 10

//书本的定义
#define OK 1
#define ERROR 0
#define OVERFLOW -2
typedef int Status;
typedef int ElemType;

typedef struct{
    ElemType *elem;
    int length;
}SqList;  

//初始化 
Status InitList(SqList &L){
    L.elem=new ElemType[MAXSIZE];
    if(!L.elem)  //存储分配失败
        exit(OVERFLOW);
    L.length=0;
}

//按位查找 
Status GetElem(SqList L,int i,ElemType &e){
    if(i<1||i>L.length)
        return ERROR;
    e=L.elem[i-1];
    return OK;
}

//按值查找
Status LocateElem(SqList L,ElemType e){
    for(int i=0;i<L.length;i++)
        if(L.elem[i]==e)
            return i+1;//返回地址
    return 0; 
} 

//插入
Status ListInsert(SqList &L,int i,ElemType e){
    if(i<1||i>L.length+1)
        return ERROR;
    if(L.length==MAXSIZE)
        return ERROR;
    for(int j=L.length-1;j>=i-1;j--)
        L.elem[j+1]=L.elem[j];
    L.elem[i-1]=e;
    L.length++;
    return OK;
} 

//删除 
Status ListDelete(SqList &L,int i){
    if((i<1)||(i>L.length))
    for(int j=i;j<=L.length-1;j++){
        L.elem[j-1]=L.elem[j];
    }
    --L.length;
     return OK;
} 

int main(){
    SqList L;
    InitList(L);
    //插入
    ListInsert(L,1,3);
    ListInsert(L,2,2);
    ListInsert(L,3,1);
    //查看表
    for(int i=0;i<L.length;i++){
        printf("elem=%d
",L.elem[i]);
    } 
    // 按值查找
    int elem;
    GetElem(L,1,elem);//输出2 
        printf("elem1=%d
",elem);
    GetElem(L,3,elem);//输出0
        printf("elem2=%d
",elem);
    //按位查找
    int local1=1;
    int local2=4;
    int elem1= LocateElem(L,local1);//输出3
    int elem2= LocateElem(L,local2);//输出0 
    printf("elem1=%d,elem2=%d
",elem1,elem2);
    //删除
    ListDelete(L,local1);//删除地址0
    //查看表
    for(int i=0;i<L.length;i++){
        printf("elem=%d
",L.elem[i]);
    } 
}
View Code

王道考研的代码实现-插入删除

#include <stdio.h>
#define MaxSize 5 //最大长度 

//初始定义值 
#define OK 1  
#define ERROR 0
#define OVERFLOW -2
typedef int Status;

//静态存储 
typedef struct{
    int data[MaxSize];//数组的静态存储 
    int length;//当前长度 
}SqList;//顺序表的类型定义 
//初始化
void InitList(SqList &L){
    L.length=0;
} 
//插入
bool ListInsert(SqList &L,int i,int e){
    if(i<1||i>L.length+1)//判断i的范围是否有效 
        return false;
    if(L.length>=MaxSize)//判断顺序表有没有满 
        return false; 
    for(int j=L.length;j>=i;j--)
        L.data[j]=L.data[j-1];    //将第i个元素及之后的元素后一 
    L.data[i-1]=e;                //在位置i处放入e 
    L.length++;                    //长度加1 
    return true; 
} 
//删除 
bool ListDelete(SqList &L,int i,int &e){
    if(i<1||i>L.length) //判断i的范围是否有效 
        return false;
    e=L.data[i-1];//将被删除的元素赋值给e
    for(int j=i;j<L.length;j++)//将第i个位置后的元素前移 
        L.data[j-1]=L.data[j];
    //应该再删除最后一个
    L.data[L.length-1]=0;
    L.length--;        //线性表长度减1 
    return true;  
} 
//违规打印 
int main(){
    SqList L;//声明
    InitList(L);//初始化顺序表
    ListInsert(L,1,3);//位置从1开始 
    ListInsert(L,2,2);
    ListInsert(L,3,1);
    ListInsert(L,1,5);//插入1的位置 
    //删除前,可以将MaxSize改成L.length 
    for(int i=0;i<MaxSize;i++){
        printf("data[%d]=%d
",i,L.data[i]);
    } 
    int e=-1;//用变量e把删除的元素“带回来”
    if(ListDelete(L,2,e))
        printf("删除了元素了%d
",e);
    else
         printf("删除了元素了");
    for(int i=0;i<MaxSize;i++){
        printf("data[%d]=%d
",i,L.data[i]);
    } 
}
View Code

王道考研的代码实现-查找

#define InitSize 10 //顺序表的初始长度 
#include <stdlib.h>//malloc函数的头文件 
#include <stdio.h> 
typedef int ElemType;
typedef struct{
    ElemType *data; //指示动态分配数组的指针
    int MaxSize;
    int Length; 
}SeqList;

//按位查找 
ElemType GetElem(SeqList L,int i){
    return L.data[i-1];//和普通访问数组一样 
}

//按值查找
int LocateELem(SeqList L,int e){
    for(int i=0;i<L.Length;i++)
        if(L.data[i]==e)
            return i+1;
    return 0;
} 
//初始化
void InitList(SeqList &L){
    L.data=(int *)malloc((InitSize)*sizeof(int));
    L.Length=0; 
    L.MaxSize=InitSize;
} 
bool ListInsert(SeqList &L,int i,int e){
    if(i<1||i>L.Length+1)
        return false;
    if(L.Length>=L.MaxSize)
        return false;
    for(int j=L.Length;j>=i;j--)
        L.data[j]=L.data[j-1];    //将第i个元素及之后的元素后一 
    L.data[i-1]=e;                //在位置i处放入e 
    L.Length++;                    //长度加1 
    return true; 
    
}
int main(){
    SeqList L;
    InitList(L);
    ListInsert(L,1,3);//位置从1开始 
    ListInsert(L,2,2);
    ListInsert(L,3,1);
    int e=3;
    e=LocateELem(L,e);

        printf("%d",e);
    
}
View Code

注:书本是指严奶奶的数据结构,使用的是dev

原文地址:https://www.cnblogs.com/chenliugou/p/14186873.html