线性表_顺序结构
作者:互联网
//关于线性表的复习
//要点就数组存储,有一个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