线性表

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;

}}

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值