C语言 顺序表 静态分配 动态分配

静态分配
头文件

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

结果:
C语言 顺序表 静态分配 动态分配_第1张图片
动态分配
头文件

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

插入
删除
查找
(待补充)

你可能感兴趣的:(笔记,c语言,数据结构,visual,studio)