《数据结构》–2.2-1顺序表的定义

静态分配

#include <stdio.h>
#include <stdlib.h>
#define MaxSize 10 //定义线性表数组的元素个数是10个 也就是静态线性表的最大长度,数组其实就是一个侠义的线性表

typedef int ElemType;

typedef struct {
	ElemType data[MaxSize];  //静态的“数组”存放数据元素
	int length;  //顺序表的当前长度
}Sqlist;

//基本操作--初始化一个顺序表
void InitList(Sqlist &L)
{
	for (int i = 0; i < MaxSize; i++)
	{
		L.data[i] = 0; //将所有的数组元素都设置为默认的初始值0
		L.length = 0;
	}
}

int main()
{
	Sqlist L; //声明一个顺序表
	InitList (L); //初始化一个顺序表

	return 0;

动态分配

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#define InitSize 10
typedef  struct {   //自定义Sqlist 结构体
	int * data;  //指示动态分配数组的指针,指向了数据表中第一个数据元素
	int MaxSize;  //顺序表中最大数据元素个数
	int length;   //顺序表中的当前长度
}Sqlist;

void InitList(Sqlist &L)
{
	L.data = (int*)malloc(InitSize * sizeof(int)); //用malloc 申请一个连续的存储空间
	L.length = 0;
	L.MaxSize = InitSize;
}

void IncreaseSize(Sqlist &L, int len)
{
	int* p = L.data;
    L.data = (int*)malloc((InitSize + len) * sizeof(int));
	for (int i = 0; i < L.length; i++)
	{
		L.data[i] = p[i];
	}
	L.MaxSize = L.MaxSize + len;
	free(p);
}
void DisplayList(Sqlist& L)
{
	for (int i = 0; i < L.MaxSize; i++)
	{
		printf("data%d=%d\n", i, L.data[i]);
	}
}
int main()
{
	Sqlist L;  //声明一个顺序表
	InitList(L); //初始化一个顺序表
	for (int i = 0; i < InitSize; i++)
	{
		L.data[i] = i;
		L.length = i;
	}
	IncreaseSize(L, 5);
	for (int i = 0; i < L.MaxSize; i++)
	{
		L.data[i] = i;
		L.length = i;
	}
	DisplayList(L);
}

删除和添加操作

#include <stdio.h>
#include <stdlib.h>
#define MaxSize 10 //定义线性表数组的元素个数是10个 也就是静态线性表的最大长度,数组其实就是一个侠义的线性表

typedef int ElemType;

typedef struct {
	ElemType data[MaxSize];  //静态的“数组”存放数据元素
	int length;  //顺序表的当前长度
}Sqlist;

//基本操作--初始化一个顺序表
void InitList(Sqlist& L)
{
	for (int i = 0; i < MaxSize; i++)
	{
		L.data[i] = 0; //将所有的数组元素都设置为默认的初始值0
		L.length = 0;
	}

}

bool  ListInsert(Sqlist& L, int i, int e)
{
	if (i<1 || i>L.length + 1)
	{
		return false;
	}
	if (L.length >= MaxSize)
	{
		return false;
	}
	for (int j = L.length; i <= j; j--)
	{
		L.data[j] = L.data[j - 1];
	}
		L.data[i - 1] = e;
		L.length++;
		return true;
}

bool ListDekete(Sqlist &L,int i,int &e)
{
	if (i<1 || i>L.length)
	{
		return false;
	}
	e = L.data[i - 1];
	for (int j = L.length; i < L.length; j++)
	{
		L.data[i - 1] = L.data[i];
	}
	L.length--;
	return true;
}


int main()
{
	Sqlist L; //声明一个顺序表
	InitList(L); //初始化一个顺序表
	for (int i = 0; i < MaxSize; i++)
	{
		L.data[i] = i;
		L.length = i;
	}
	int e = -1;


	return 0;
}
Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐