线性表的概念与实现--顺序存储( 数组 )C语言

#include<stdio.h>
#include<stdlib.h>
struct list* Makelist();
void Addlist(list* L,int data,int insert);
struct list
{
	int data[10];
	int last;
};

int main()
{
	list* L;
	int data;
	int insert;
	L = Makelist();
	scanf("%d",&data);
	scanf("%d",&insert);
	Addlist(L,data,insert);
	printf("%d\n",L->last);
	printf("%d",L->data[L->last]);
	return 0;
}
//存在问题: 
//新建一个顺序线性表时,不存在元素所以LAST指向-1,但是从0位置插入元素后,LAST的指向并没有改变,并且DATA[LAST]的值并不存在;
struct list* Makelist()
{
	list* L;
	
	L = (struct list *)malloc(sizeof(struct list)); 
	L->last = -1;
	return L;
}

void Addlist(list* L,int data,int insert)
{
	int i;
	
	if (L->last>=10)
	{
		printf("表已满");
		return ;
	}
	if ( insert<0 || insert>L->last+1 ) 
	{ /* 检查插入位置的合法性 */
        printf("位置不合法");
        return ; 
    } 
	for (i = L->last; i>=insert-1; i--)     //在这里存在问题
	{										//问题解决:出现在insert,因为insert要插的位置是0前面,而此时的线性表中没有元素,last指向-1,所以要把
		L->data[i+1] = L->data[i];			//insert-1,从这个元素开始之后的每一个元素都要往后移动,给新插入的元素一个位置,就是insert的位置.
		 L->data[insert] = data;
		 L->last++;
		 return ;
	}
}
//已解决
void Delete(list* L,int del)
{
	int i;

	if (del<0||del>L->last+1)
	{
		printf("yi man");
		return ;
	}
	for(i = del+1; i<10; i++)
	{
		L->data[i] = L->data[i+1];
		L->last--;
	}
}

//还缺一个查找

编程的时候存在的问题:

创建线性表时,last指向为最后一个数据所在位置

最初线性表中没有元素,所以last真正指向的位置并不是数组的下标;

(可以理解为数组的第一个存储单位之前)

当录入内容时,数组中存在元素,因此last的指向位置会增加,此时last会真正指向数组的第一个下标.

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值