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

#include
#include
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会真正指向数组的第一个下标.

你可能感兴趣的:(数据结构)