数据结构C语言实现之顺序表

线性表

线性表包含链表与顺序表

顺序表

定义:用一组地址连续的存储单元依此存储线性表的数据元素
特点:逻辑上相邻的数据元素,其物理次序也是相邻的
存储结构(C语言实现):

定义顺序表

为顺序表分配一个预定义大小的数组空间,并将线性表的当前长度设为“0”

#define SQLMAXSIZE 100;		//定义顺序表最大长度

typedef struct{
	int data[SQLMAXSIZE];		//分配预定义数组空间
	int length;
}SqList

void InitList(SqList *l)		//将线性表当前长度设为0
{
	l->length = 0;
}

建立顺序表

建立的顺序表其实也就是写一块函数满足顺序表的定义的函数,即传入一组数据并写入顺序表中,n代表传入数据个数

int CreatList(SeqList *l, int a[], int n) {
	if (n > MAXSIZE)
	{
		printf("空间不够,无法建立顺序表。\n");
		return 0;
	}
	for (int k = 0; k < n; k++)
	{
		l->data[k] = a[k];
	}
	l->length = n;
	return 1;
}

判断顺序表是否为空

int Empty(SeqList *l)		//为空传1,非空传0
{
	if (l->length == 0)
		return 1;
	else
		return 0;
}

求顺序表表长

int Length(SeqList *l)
{
	return l->length;
}

遍历顺序表中元素并打印出来

void PrintList(SeqList *l)
{
	for (int i = 0; i < l->length; i++)
		printf("%d ", (l->data[i]));
}

按照表中值进行查找

int Locate(SeqList *l,int x)
{
	for (int i = 0; i < l->length; i++)
	{
		if (l->data[i] == x)
		{
			return i + 1;
		}
	}
	
	return printf("\n列表中无参数\n");
}

按表中位置进行查找

int Get(SeqList *l, int x,int *ptr)
{
	if ( x <1 || x>l->length){		//检测是否超出表长
		printf("查找位置非法,查找错误\n");
		return 0;
	}
	else
	{
		*ptr = l->data[x];		//从表中取出第X位数据
		return 1;
	}
}

向表中插入数据

int Insert(SeqList *l, int i, int x)
{
	if (l->length > MAXSIZE)
	{
		printf("超出表空间!");
		return 0;
	}
	if (i<1 || i>l->length)
	{
		printf("插入位置非法!");
		return 0;
	}
	for (int k = l->length; k > i; k--)		//将i位及以后数据后移,为插入元素准备空间
	{
		l->data[k] = l->data[k - 1];
	}
	l->data[i] = x;		//i位元素写入
	l->length++;
	return 1;
}

按位删除数据,并返回删除数据值

int Delete(SeqList *l, int i, int *ptr)
{
	if (l->length == 0)
	{
		printf("顺序表为空\n");
		return 0;
	}
	if (i > l->length || i < 1)
	{
		printf("删除位置错误!\n");
		return 0;
	}
	*ptr = l->data[i - 1];		//把要删除的数据返回
	for (int j = i; j < l->length; j++)
	{
		l->data[j - 1] = l->data[j];		//将i右边数据左移一位,直接覆盖掉原始i位数据
	}
	l->length--;
	return 1;
}

按位修改操作

int Modify(SeqList *l, int i, int x)
{
	if (i > l->length || i < 1)
	{
		printf("插入位置错误!\n");
		return 0;
	}
	l->data[i] = x;    //会直接改变i位置值
	return 1;
}
posted @   sliencely  阅读(12)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
点击右上角即可分享
微信分享提示