数据结构—链表的复习

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;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值