1.线性表
线性表(Linear List)是由同类数据元素构成的有序序列的线性结构
2.线性表的顺序存储(利用数组的连续存储空间顺序存放线性表的各个元素)
struct LNode{
ElementType Data[Maxsize];//定义一个数组存放元素,数组的最大容量为Maxsize
int last;//最后一个元素的位置
};
typedef struct LNode *List;//定义结构指针List
struct LNode L;//定义线性表对象L
List PtrL;//定义指针对象PtrL
访问下标为i的元素:L.Data[i],PtrL->Data[i]
线性表的长度:L.last,PtrL->last
2.1初始化
List MakeEmpty()
{
List PtrL;
PtrL=(List)malloc(sizeof(struct LNode));//申请空间
Ptrl->last=-1;
return Ptrl;
}
2.2查找
int Find(ElementType X,List Ptrl)
{
int i=0;
while(i<=Ptrl->last && Ptrl->Data[i]!=X)
i++;
if(i>Ptrl->last)
return -1;
else
return i;
}
2.3插入(第i(1<=i<=last+1)个位置上插入X
void Insert(ElementType X,int i,List Ptrl)
{
if(i>=1&&i<=Last+1)
{
for(int j=Ptr->last;j>=i-1;j--)
{
Ptrl->Data[j+1]=Ptrl->Data[j];
}
Ptrl->Data[i-1]=X;
Ptrl->last++;
}
else if(i==last+2)
Ptrl->Data[i]=X;
}
else if(i<1 && i>Ptrl->Last+2)
{
printf("error")
return;
}
if(Ptrl->Last==MAXSIZE-1)
{
printf("表已满");
return;
}
2.4删除元素
void Delect(int i,List Ptrl)
{
if(i<1 && i>Ptrl->last+1)
{
printf("error");
return;
}
for(int j=i-1;j<Ptrl->last;j++)
{
Ptrl->Data[j]=Ptrl->Data[j+1];
}
Ptrl->last--;//删除一个元素后,last要减一,同时执行当i=last+1时的删除功能
return;
}
3.线性表的链式存储实现
typedef struct LNode *List;
struct LNode
{
ElementType Data;
List Next;
};
Struct LNode L;
List Ptrl;
3.1求表长
int length(List Ptrl)
{
List p=Ptrl;
int i=0;
while(p)
{
p=p->next;
i++;
}
3.2查值
List FindKth(int K,List Ptrl)
{
List p=Ptrl;
int j=1;
while(j<K && !=NULL)
{
p=p->next;
j++;
}
if(i==K)
return p;
else
return NULL;
}
3.3查值
List Find(ElementType X,List Ptrl)
{
List p=Ptrl;
if(p!=NULL && p->Data !=X)
p->next;
return p;
}
3.4插入(在第i-1个(i=1~n)个节点后插入X)
List Insert(int i,ElementType X,List Ptrl)
{
List s,p;
if(i==1)
{
s=(List)malloc(sizeof(struct Node));
s->Data=X;
s->next=Ptrl;
return s;
}
p=FindKth(i-1,Ptrl);
if(p==Null)
{printf("error");
return NULL;
}
else{
s=(List)malloc(sizeof(struct LNode));
s->Data=X;
s->next=p->next;
p->next=s;
return Ptrl;
}
}
4.5删除
List Delect(int i,List Ptrl)
{
List p,s;
if(i==1){
s=Ptrl;
if(Ptrl!=NULL)
Ptrl=Ptrl->next;
else
return NULL;
free(s);
return Ptrl;
}
p=FindKth(i-1,Ptrl);
if(p==NULL || p->next==NULL)
return NULL;
else
{s=p->next;
p->next=s->next;
freea(s);
return Ptrl;
}}