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;
}