ADT(abtract data type)
链表:
(1)链表的指针实现:
链表结构体类型:
//链表结构体
typedef struct Node
{
ElementType Element;//数据域
Node* position;//指针域
}*position,*List;
链表操作的相关函数:
//判断链表是否为空
int IsEmpty(List l)
{
return (l->next==0);
}
//判断链表是否到达末尾
int IsLast(position p)
{
return (p->next==NULL);
}
//创建链表
position create List()
{
position head;//链表头结点位置
head=new Node;//创建头结点
head->next=NULL;
return head;//返回链表头结点
}
position
//链表的插入操作
position Insert(ElementType x,position p)
{
position temp;//插入的新节点的位置
temp=new Node;//为新节点分配存储空间(只要插入新节点一定要申请内存)
temp->next=x;
temp->next=p->next;
p->next=temp;
/*链表有两种节点的插入方式:(1)从头部插入;(2)从尾部插入
两种插入方式的不同只是由于在Inset()插入操作中返回值的不同;
*/
//第一种 头部插入
//return p;
//第二种 尾部插入
return temp;
}
//删除节点操作,这里默认删除位置p处的元素即为删除位置p后的第一个元素
void Delete(position p)
{
if(p->next==NULL)
{
std::cout<<"链表已空"<<std::endl;
}
position temp;
temp=p->next;
p->next=temp->next;
delete temp;
}
//查找表中的元素x第一次出现的位置
position find(Element x,List l)
{
position p;
p=l->next;
while(p->next!=NULL && p->element!=x)
{
p=p->next;
}
return p;
}
//查找表中元素x第一次出现位置的前一个位置
position findprevious(ElementType x,List l)
{
position p;
p=l->next;
while(p->next!=NULL && p->next->element!=x)
{
p=p->next;
}
return p;
}
(2)链表的游标实现:
游标结构体类型:
typedef int position;
typedef int List;
typedef struct Node
{
ElementType Element;
int next;
};
struct Node space[size];//由于是数组实现,所以要提前申请内存
链表的数组实现的相关操作:
//申请内存
position newmemory()
{
/*if(space[0].next!=0)
{
cout<<"无内存"<<endl;
}*/
position p;
p=space[0].next;
space[0].next=space[p].next;
return p;
}
//分配内存
void Deletememeory(position p)
{
space[p].next=sapce[0].next;
space[0].next=p;
}
//判断链表是否为空
int IsEmpty(List L)
{
return (sapce[L].next==0);
}
//判断链表是否到达末尾
int IsLast(position p,List L)
{
return (space[p].next==0);
}
//创建表
createlist(List l)
{
List s;
}
//插入节点
position insert(ElementType x,position p)
{
Position temp;
temp=newmemory();
space[temp].element=x;
space[temp].next=spce[p].next;
space[p].next=temp;
//插入操作仍然有两种方式,这里选择的事从尾部插入
return temp;
}
//删除节点操作,删除位置p后面的元素
void Delete(position p)
{
position temp;
temp=space[p].next;
space[p].next=space[temp].next;
Deletememory(temp;)
}
//寻找链表中元素x第一次出现的位置
position find(ElementType x,List L)
{
position p;
p=space[L].next;
while(p && space[p].element!=x)
{
p=space[p].next;
}
return p;
}