C语⾔顺序表静态分配动态分配
静态分配
头⽂件
#include<stdio.h>
#include<stdbool.h>//⽤到⼩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)
return404;//位序合法?
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;
}
return0;//如果没查到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)); return0;
}
结果:
动态分配
头⽂件
#include<stdio.h>
#include<stdlib.h>
⽤结构体创表
#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);//扩容
return0;
}
c语言listinsert函数插⼊
删除
查
(待补充)
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论