线性表(链式存储)
顺序表包括两种存储方式:1.顺序存储,随机读取(顺序表).2.随机存储,顺序读取(链式表)[cpp] view plaincopy
//单链表的实现
#include <iostream>
#include <stdlib.h>
using namespace std;
typedef int ElemType;
struct List
{
ElemType data;
List *next;
};
void InitList(List *&HL)//初始化线性表
{
HL=NULL;
}
void ClearList(List *&HL)//删除线性表
{
List *cp,*np;
cp=HL;
while(cp)
{
np=cp->next;
delete cp;
cp=np;
}
HL=NULL;
}
int LengthList(List *HL)//得到单链表的长度
{
int i=0;
while(HL)
{
i++;
HL=HL->next;
}
return i;
}
bool EmptyList(List *HL)//检测单链表是否为空
{
return HL==NULL;
}
ElemType GetList(List *HL,int pos)//得到单链表中第pos个结点中的元素
{
if(pos<1)
{
cout<<"pos is invalid"<<endl;
exit(1);
}
int i=0;
while(HL)
{
i++;
if(i==pos) break;
HL=HL->next;
}
if(HL)
return HL->data;
else
{
cout<<"pos is out range"<<endl;
exit(1);
}
}
void TraverseList(List *HL)//遍历单链表
{
while(HL)
{
cout<<HL->data<<" ";
HL=HL->next;
}
cout<<endl;
}
bool FindList(List *HL,ElemType &item)//查找是否具有该元素
{
while(HL)
{
if(HL->data==item)
{
item=HL->data;
return true;
}
else HL=HL->next;
}
return false;
}
bool UpdateList(List *HL,const ElemType &item)//更新某个元素
{
while(HL)
{
if(HL->data==item) break;
else HL=HL->next;
}
if(!HL) return false;
else
{
HL->data=item;
return true;
}
}
bool InsertList(List *&HL,ElemType item,int pos)//插入一个元素
{
if(pos<-1)
{
cout<<"pos is invalid"<<endl;
return false;
}
List *newpt;
newpt=new List;
newpt->data=item;
List *cp=HL,*ap=NULL;
if(pos==0)
{
while(cp)
{
if(item<cp->data) break;
else
{
ap=cp;
cp=cp->next;
}
}
}
else if(pos==-1)
while(cp)
{
ap=cp;
cp=cp->next;
}
else
{
int i=0;
while(cp)
{
i++;
if(i==pos) break;
else
{
ap=cp;
cp=cp->next;
}
}
if(cp==NULL&&i+1<pos)
{
cout<<"pos is rang out"<<endl;
return false;
}
}
if(ap==NULL)
{
newpt->next=HL;
HL=newpt;
}
else
{
补充:软件开发 , C++ ,