其他分享
首页 > 其他分享> > 线性表_顺序结构

线性表_顺序结构

作者:互联网

//关于线性表的复习
//要点就数组存储,有一个last/len值表明表的长度,或者说表面最后一个元素的物理/存储位置
//数据数组存储是从a[0]开始存储的,求逻辑长度时得让物理长度last加1,即逻辑长度为last+1
//主要要注意的是逻辑和物理的转换;
#define MAX 1000
typedef struct node *List;
struct node
{
	int data[MAX];
	int last; //len
};
node L;

List MakeEmpty()
{
	List PtrL;//一个指向node类型的指针;
	PtrL = (List)malloc(sizeof(node));
	PtrL->last=-1;
	return PtrL;
}

int Find(int x,List PtrL)//按值查找
{
	int i=0;
	while(i<=PtrL->last && PtrL->data[i] !=x)//两个条件都可能被破坏
		i++;
	if(i>PtrL->last)return -1;
	else return i;
}

void Insert(int x,int i,List PtrL)//插入到第i个元素前面,则表示插入到a[i-1]这个元素的前面
{
	int j;
	if(PtrL->last == MAX-1)//MAX为数组大小,数组存储从0开始,故最后一个元素下标为MAX-1
	{
		cout << "满了";
		return;
	}
	if(i<1||i>PtrL->last+2)//此处i为逻辑位置,元素下标从1开始数,表示插入到第i个数的前面
	{//PtrL->last+1表示逻辑位置的最后一个数,即物理位置的a[last];
		cout << "位置不合法";
		return;
	}
	for(int j=PtrL->last;j>=i-1;j--)//从最后一个元素开始,每个都往后移动一位,i为逻辑位置,直到移动完a[i-1]就可以插入了
		PtrL->data[j+1]=PtrL->data[j];
	//移动完后a[i-1]就可以认为是空了,即第i个位置为空
	PtrL->data[i-1]=x;
	PtrL->last++;
	return;
}

void del(int i,List PtrL)
{
	int j;
	if(i<1||i>PtrL->last+1)//i为删除第i个元素,last+1为最后一个位置,即a[last]这个元素;
	{
		cout << "位置不合法";
		return;
	}
	for(int j=i;j<=PtrL->last;j++)//从第i+1个元素开始,也就是a[i]开始,到最后一个元素都往前移动
	//a[i-1]即第i个元素就被覆盖了,这样就实现了删除
		PtrL->data[j-1]=PtrL->data[j];
	PtrL->last--;
}

 

标签:顺序,last,线性表,int,元素,List,PtrL,data,结构
来源: https://www.cnblogs.com/lxl-233/p/16364890.html