静态分配
头文件
#include
#include //用到小bool
创表
#define MaxSize 10 //定义最大容量
typedef struct //类型重命名
{
int data[MaxSize]; //存放数据
int length; //当前长度
} Sqlist; //结构体名:Sqlist
初始化
void InitList(Sqlist *L)
{
L->data[0] = 1; //位序:1
L->data[1] = 2; //位序:2
L->data[2] = 3; //位序:3
L->data[3] = 4; //位序:4
L->data[4] = 5; //位序:5
L->length = 5;
}
插入数据
bool ListInsert(Sqlist* L, int i, int e)
{
//在L的位序i处插入元素e
if (i<1 || i>L->length + 1)//注:length+1
return false; //位序合法?
if (i > Maxsize)
return false;//位序合法?
for(int j = L->length; j >= i; j--)
L->data[j] = L->data[j - 1];
L->data[i] = e;
L->length++;
return true;
}
删除元素
bool ListDelete(Sqlist* L, int i,int *p)
{
if (i<1 || i>L->length)
return false; //位序合法?
*p = L->data[i - 1];
for (int j=i-1; j<L->length; j++)
L->data[j-1] = L->data[j];
L->length--;
return true;
}
按位查找
int GetElem(Sqlist L, int i)
{
//按位查找:查第i位的元素值
if (i<1 || i>L.length)
return 404; //位序合法?
else
return L.data[i - 1];
}
按值查找
int LocateElem(Sqlist L, int e)
{
//按值查找:查值为e对应的是第几个元素
for (int j = 0; j < L.length; j++)
{
if (L.data[j] == e)
return j+1;
}
return 0; //如果没查到e,就返回0
}
主函数
int main(void)
{
Sqlist L;
InitList(&L);
//插入
if (ListInsert(&L, 4, 222))
{
printf("插入成功,现在的元素有:\n");
for (int i = 0; i < L.length; i++)
printf("data[%d]=%d\n", i, L.data[i]);
}
else
printf("嘤,插入失败啦\n");
//删除
int p = -666;
if (ListDelete(&L, 2, &p))
printf("已删除第2个元素,它是%d\n", p);
else
printf("害,删除失败\n");
//查找
printf("按第8位查到的是(404是报错):%d\n", GetElem(L, 8));
printf("按值222查到所在的位置是:第%d个元素\n", LocateElem(L, 222));
return 0;
}
#include
#include
用结构体创表
#define InitSize 10 //定义初始容量
typedef struct //类型重命名
{
int *data; //指针指向首元素首地址
int Maxsize;//顺序表最大容量
int length; //当前长度
} Sqlist; //结构体名:Sqlist
初始化
void InitList(Sqlist *L) //初始化
{
L->data = (int *)malloc(InitSize * sizeof(int));
L->length = 0; //初始长度为0
L->Maxsize = InitSize; //当前表的最大容量
}
扩容
void IncreaseSize(Sqlist *L, int len)//增加表长
{
int *p = L->data; //类似box,存原表首位置,
// then让L->data为新表申请更大的空间
L->data = (int *)malloc((L->Maxsize + len) * sizeof(int));
for (int i = 0; i < L->length;i++)
L->data[i] = p[i];
L->Maxsize = InitSize + len; //当前表的最大容量
free(p);
}
主函数
int main(void)
{
Sqlist L; //创表
InitList(&L); //初始化表
IncreaseSize(&L, 5);//扩容
return 0;
}
插入
删除
查找
(待补充)