线性表_链式存储
及相关操作
#include<iostream>
#include<cstdlib>
using namespace std;
typedef struct LNode{
int date;
struct LNode *Next;
}List;
List *PtrL;
struct LNode L;
// 1;求表长
int Length(List *PtrL)
{
List *P=PtrL;
int j=0;
while(P!=NULL)
{
j++;
P=P->Next;
}
return j;
}
// 2:查找
// (1) 按序号查找
List* FindKth(int K,List* PtrL)
{
int i=1;
List *P=PtrL;
while(P!=NULL && i<K){
i++;
P=P->Next;
}
if(i==K) return P; //找到第K个返回指向第K个的指针
else return NULL;
}
// (2) 按值查找
List* Find(int X,List* PtrL)
{
List* P=PtrL;
while(P!=NULL || P->date!=X)
{
P=P->Next;
}
if(P->date==X) return P; // 这俩行实际
else return NULL; // 只用returnP就ok
}
// 3:插入 {在第i-1(1<=i<=n+1)个结点后插入一个值为X的新结点
List* Insert(int X,int i,List* PtrL)
{
List *P;
List *S;
if(i==1) /* 新结点在表头*/
{
S=(List*)malloc(sizeof(List));
S->Next=PtrL;
S->date=X;
return S;
}
// 找到第i-1个位置并用P标记
P=FindKth(i-1,PtrL); /* 法一 */
// 找到第i-1个位置并用P标记 /* 法二 */
int j=0;
P=PtrL;
while(P!=NULL || j<i-1)
{
j++;
P=P->Next;
}
if(P==NULL)
{
cout<<"参数i错误";
return NULL;
}
else
{
S=(List*)malloc(sizeof(List));
S->date=X;
S->Next=P->Next;
P->Next=S;
return PtrL;
}
}
// 4:删除(删除第i个位置的结点
List *del(int i,List *PtrL)
{
List *P=NULL;
List *S=NULL;
List *head=PtrL;
if(i==1)
{
S=PtrL;
if(PtrL!=NULL) PtrL=PtrL->Next;
else return NULL;
free(S);
return PtrL;
}
int j=1;
for(P=head;j<i-1;j++)
{
P=P->Next;
}
S=P->Next;
P->Next=S->Next;
free(S);
return head;
}
int main()
{
return 0;
}