您的位置:首页 > 理论基础 > 数据结构算法

数据结构学习笔记-03-线性表及其实现

2018-12-23 10:13 162 查看

线性表的顺序存储实现

typedef struct LNode *list;
struct LNode
{
ElementType Data[MAXSIZE];
int Last;
};

struct LNode L;
List Ptrl;

初始化:

List MakeEmpty()
{
List PtrL;
PtrL = (List )malloc(sizeof(struct LNode));
PtrL->Last = -1;
return PtrL;
}

查找指定元素:

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;
}

插入:

void insert(ElementType X,int i,List PtrL)
{
int i;
if(PtrL->Last == MAXSIZE-1)
{
printf("表满");
return;
}
if (i<1||i>PtrL->Last+2)
{
printf("位置不合法");
return;
}
for (j=PtrL->Last;j>=i-1;j--)
PtrL->Data[j+1]=PtrL->Data[j];
PtrL->Data[i-1]=X;
PtrL->Last++;
return;
}

删除节点:

void Delete(int i,List PtrL)
{
int j;
if (i<1||i>PtrL->Last+1)
{
printf("不存在第%d个元素",i);
return;
}
for (j=i;j<=PtrL->Last;j++)
PtrL->Data[j-1] = PtrL->Data[j];
PtrL->Last--;
return;
}

线性表的链式存储实现

typedef struct LNode *List;
struct LNode
{
ElementType Data;
List Next;
};
struct LNode L;
List PtrL;

求表长:

int Length(List PtrL)
{
List p = PtrL;
int j = 0;
while(p)
{
p=p->Next;
j++;
}
return j;
}

按序号查找:

List FindKth(int K,List PtrL)
{
List p = PtrL;
int i = 1;
while(p!=NULL&&i<K)
{
p = p->Next;
i++;
}
if (i==K)
return p;
else return NULL;
}

按元素值查找:

List Find(ElementType X,List PtrL)
{
List p=PtrL;
while(p!=NULL && p->Data!=X)
p=p->Next;
return p;
}

插入节点:

List Insert(List PtrL,int k,ElementType X)//插入元素
{
List p,s;
if (k==1)
{
s=(List)malloc(sizeof(struct LNode));
s->Data=X;
s->Next=PtrL;
return s;
}
p=FindKth(k,PtrL)
if (p==NULL)
{
printf("参数k出错");
return NULL;
}
else
{
s=(List)malloc(sizeof(struct LNode));
s->Data=X;
s->Next=p->Next;
p->Next=s;
return PtrL;
}
}

删除节点:

List Delete(int k,LIst PtrL)//删除节点
{
List p,s;
if (k==1)
{
s=PtrL;
if (PtrL!=NULL)
PtrL=PtrL->next;
else
return NULL;
free(s);
return PtrL;
}
p=FindKth(k-1,List)
if (p==NULL)
{
printf("第%d个节点不存在",k-1);
return NULL;
}
if (p->Next==NULL)
{
printf("第%d个节点不存在",k);
return NULL;
}
else
{
s=p->Next;
p-Next=s->Next;
free(s);
return PtrL;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: