中国大学慕课——浙江大学数据结构 2.1线性表的顺序存储(用数组实现)

#include <stdio.h>
#include <stdlib.h>
//#define MAXSIZE 100;
const int MAXSIZE = 100;
struct LNode
{
	int data[MAXSIZE];//可以开一个数组 也可以用一个指针 来表示数组的首地址
	int len;//线性表的长度 或者叫做数组的最后一个元素
};
typedef struct LNode *list;
struct LNode L;

//初始化 建立一个空表
list make_empty()
{
	list PtrL;
	PtrL = (list)malloc(sizeof(struct LNode));
	PtrL->len = -1;
	return PtrL;
}

//查找
int find(int x, list ptr)
{
	int i = 0;
	while (i <= ptr->len&&ptr->data[i] != x)
	{
		i++;
	}
	//两种情况对应while里的两个条件
	if (i > ptr->len)
	{
		return -1;//没找到返回-1
	}
	else
	{
		return i;//找到了返回下标
	}
}

//插入操作 将x插到第i个位置
void insert(int x, int i, list ptr)
{
	int j;
	if (ptr->len == MAXSIZE - 1)
	{
		printf("表满!\n");
		return;
	}
	if (i<1 || i>ptr->len + 2)
	{
		printf("插入位置不合法!\n");
		return;
	}
	for (j = ptr->len; j >= i - 1; j--)
	{
		ptr->data[j+1] = ptr->data[j];
	}
	ptr->data[i - 1] = x;
	ptr->len++;
	return;
}

//删除
void Delete(int i, list ptr)
{
	if (i<1 || i>ptr->len + 1)
	{
		printf("删除的位置不合法!\n");
		return;
	}
	int j = 0;
	for (j = i; j <= ptr->len; j++)
	{
		ptr->data[j - 1] = ptr->data[j];
	}
	ptr->len--;
	return;
}

int main(void)
{
	return 0;
}

几个注意点:
1、由于malloc的函数类型为void * 但是申请的连续空间是一个结构体类型的指针,所以要进行强制转换成结构体类型
在这里插入图片描述
2、插入操作,插到第i个位置,其实是把插入的元素放在了第i-1的位置上。判断插入位置时,有两种情况,一种是插入位置小于数组,另一种是插入位置大于数组
*小的时候,i<1不能是i<0 ,因为当i<0时,有可能插入到-1的位置,这是非法操作!
大的时候,插入的位置可以是数组最后一个元素的下一个位置(尾插),但不能是len+2这个位置!

**
在这里插入图片描述
3、插入操作,移动元素一定一定是从最后一个元素一个一个往后移动!
在这里插入图片描述
如果是for (j = i-1; j <= ptr->len; j++) 那data[i-1]到data[ptr->len+1]都是同一个值,即移之前data[i-1]的值
4、删除操作,移动元素时要和插入时候区分,删除元素一定是从要删除元素的下一个开始,一个一个往前移动。此时的删除并没有真正删除,而是下一个元素覆盖了要删除元素的值。
在这里插入图片描述

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值