2023-03-23 顺序表SqList基本操作

//顺序表

#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>

#define initsize 10

typedef struct 
{
    int *data;
    int length;//顺序表的元素个数长度
    int maxsize;//顺序表可扩展的最大长度
}SqList;//定义名为SqList结构体类型,类似于#define

void increaselen(SqList *L,int len)//扩展内存空间
{
    int *p=L->data;//将原来的data首地址传给p
    L->data = (int *)malloc((L->maxsize+len)*sizeof(int));//重新开辟一块新空间
    for(int j=0;j<L->maxsize;j++)
    {
        L->data[j]=p[j];//再将原来的数据赋值给现在的data
    }
    L->maxsize+=len;
    free(p);
}

void initlist(SqList *L)
{
    L->data=(int *)malloc(initsize*sizeof(int));
    for(int i=0;i<initsize;i++)
    {
        L->data[i]=0;
    }
    L->length=0;
    L->maxsize=initsize;
}

bool insertlist(SqList *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];
    }
    L->data[i-1]=e;
    L->length++;
    return true;
}

bool deletelist(SqList *L,int i,int *e)//删除元素
{
    if(i<1||i>L->length)
    {
        return false;
    }
    *e=L->data[i-1];
    for(int j=i;j<L->length;j++)//若i=length即最后一个元素怎么办?->直接覆盖
    {
        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)//按位查找
{
    return L->data[i-1];
}

int main()
{
    SqList L; 
    initlist(&L);
     
    insertlist(&L,1,1);
    insertlist(&L,2,2);
    insertlist(&L,3,3);
    insertlist(&L,4,4);
    insertlist(&L,5,5);
    insertlist(&L,6,6);
    insertlist(&L,7,7);

    int *e;//用指针从函数中取回删除的值
    int a=0;
    e=&a;//对指针进行初始化,避免出现野指针
    deletelist(&L,3,e);

    for(int i=0;i<L.length;i++)
    {
        printf("%d ",L.data[i]);
    }
    printf("\n");
    printf("当前SqList的长度为: %d\n",L.length);
    printf("删除的元素为: %d\n",*e);
    printf("5的位置在: %d\n",locateElem(&L,5));
    return 0;

}
 

C++:

//顺序表

#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>

#define initsize 10

typedef struct 
{
    int *data;
    int length;//顺序表的元素个数长度
    int maxsize;//顺序表可扩展的最大长度
}SqList;//定义名为SqList结构体类型,类似于#define

void increaselen(SqList &L,int len)//扩展内存空间
{
    int *p=L.data;//将原来的data首地址传给p
    L.data = (int *)malloc((L.maxsize+len)*sizeof(int));//重新开辟一块新空间
    for(int j=0;j<L.maxsize;j++)
    {
        L.data[j]=p[j];//再将原来的数据赋值给现在的data
    }
    L.maxsize+=len;
    free(p);
}

void initlist(SqList &L)
{
    L.data=(int *)malloc(initsize*sizeof(int));
    for(int i=0;i<initsize;i++)
    {
        L.data[i]=0;
    }
    L.length=0;
    L.maxsize=initsize;
}

bool insertlist(SqList &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];
    }
    L.data[i-1]=e;
    L.length++;
    return true;
}

bool deletelist(SqList &L,int i,int *e)//删除元素
{
    if(i<1||i>L.length)
    {
        return false;
    }
    *e=L.data[i-1];
    for(int j=i;j<L.length;j++)//若i=length即最后一个元素怎么办?->直接覆盖
    {
        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)//按位查找
{
    return L.data[i-1];
}

int main()
{
    SqList L; 
    initlist(L);
     
    insertlist(L,1,1);
    insertlist(L,2,2);
    insertlist(L,3,3);
    insertlist(L,4,4);
    insertlist(L,5,5);
    insertlist(L,6,6);
    insertlist(L,7,7);

    int *e;//用指针从函数中取回删除的值
    int a=0;
    e=&a;//对指针进行初始化,避免出现野指针
    deletelist(L,3,e);

    for(int i=0;i<L.length;i++)
    {
        printf("%d ",L.data[i]);
    }
    printf("\n");
    printf("当前SqList的长度为: %d\n",L.length);
    printf("删除的元素为: %d\n",*e);
    printf("5的位置在: %d\n",locateElem(L,5));
    return 0;

}

 

posted @ 2023-03-22 21:19  正方形的被子  阅读(97)  评论(0)    收藏  举报