线性表——顺序表

线性表的定义:线性表是由n(n>=0)个性质相同的数据元素组成的有限序列,n称为线性表的长度。对于非空线性表(k0,k1,……,kn-1),具有唯一一个“第一个结点”,即开始结点k0,它没有直接的前驱,仅有一个直接的后继k1;具有唯一一个“最后一个”结点,即终端结点kn-1,它没有直接的后继,仅有一个直接的前驱kn-2,其余内部结点ki都有且仅有一个直接的前驱和一个直接的后继。

线性表类型:顺序表和链表

顺序表

主要操作:

  1. SeqList SetNullList (int m) 创建一个空的线性表
  2. int IsNull(SeqList list) 判断线性表是否为空
  3. int InsertPre(SeqList list , position p , DataType x) 在线性表中第p个位置q前插入元素x
  4. int InsertPost(SeqList list , position p , DataType x) 在线性表中第p个位置后插入元素x
  5. int DelIndex(SeqList list , position p ) 删除线性表中第p个位置元素
  6. int DelValue(SeqList list , DataType x) 删除线性表中值为x的元素
  7. int FindIndex(SeqList list , DataType x) 在线性表中查找值为x元素的位置

顺序表数据类型的定义

typedef int DataType;
struct List
{
      int Max;//最大可容元素的个数
      int n;//记录元素的个数
      DataType*elem;
};
typedef struct List*SeqList;

创建一个空的线性表
在这里插入图片描述

//代码实现
SeqList SetNullList (int m)
{
	SeqList alist = (SeqList)malloc(sizeof(struct List));
	if(alist!=NULL)
	{
		alist->elem = (DataType*)malloc(sizeof(DataType)*m);
		if(alist->elem!=NULL)
		{
			alist->n = 0;
			alist->Max = m;
			return alist;
		}
		else free(alist);
	}
	printf("Alloc failure!\n");
	return NULL;
}

判断线性表是否为空

int IsNull(SeqList list)
{
	if (list->n == 0)
	{
		printf("is null!\n");
		return 1;
	}
	else
	{
		printf("not null!\n");
		return 0
	}
}

在线性表中第p个位置q前插入元素x
在这里插入图片描述

//代码描述
int InsertPre(SeqList list , int p , DataType x)
{
	int i;
	if (list->n >= list->Max)//判断是否超出数组的容量
	{
		printf("overflow!\n");
		return 0;
	}
	if (p<0 || p>list->n)
	{
		printf("not exit!\n");
		return 0;
	}
	for (i = list->n; i >= p; i--)
	{
		list->elem[i + 1] = list->elem[i];
	}
	list->elem[p] = x;
	list->n++;
	return 1;
}
//int InsertPost(SeqList list , position p , DataType x)		
//在线性表中第p个位置后插入元素x
//即为在p+1位置插入元素x与上面算法相同,只需要把p改成p+1即可

删除线性表中第p个位置元素
在这里插入图片描述
可以看作为元素的覆盖

//代码实现
int DelIndex(SeqList list, int p)
{
	int i;
	if (p > list->n||p < 0)//p位置不存在
	{
		printf("not exit!\n");
		return 0;
	}
	for (i = p; i < list->n-1;i++)
	{
		list->elem[i] = list->elem[i + 1];
	}
	list->n--;
	return 1;
}

在线性表中查找值为x元素的位置

int FindIndex(SeqList list, DataType x)
{
	int i, p;
	if (IsNull(list))//判断是否为空表
	{
		printf("not exit!\n");
		return -1;
	}
	for (i = 0; i < list->n; i++)
	{
		if (list->elem[i] == x)break;
	}
	p = i;
	return p;
}

删除线性表中值为x的元素

//代码实现
int DelValue(SeqList list, DataType x)
{
	int p;
	p=Find(list,x);
	if (p == list->n||p == -1)
	{
		printf("not exit!\n");
		return 0;
	}
	else
	{
		DelIndex(list, p);
		return 1;
	}
}
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值