线性表的链式存储结构(1)--单向链表

  • 单向链表类C描述

typedef struct node{

    datatype data;//数值域

    struct node *next;//指针域

}node,*linklist;//节点类型,指针类型

  • 链表基本算法

1.单向链表定位

node *locate(node *head,int i)//head是带头结点的单向链表的头指针,该算法定位于链表中的第i个结点

{

    node *p=head;//指针初始化,p指向头结点

    int j=0;//j为计数器,初值为零

    while((p!=NULL)&&(j

    {

        p=p->next;//p后移,p移至第i个结点为止

        j++;//j计数

    }

    return(p);//p指向第i个结点(返回第i个结点的地址)

}

2.单向链表插入

void insert(linklist head,int i,datatype x)

{//head是带头结点的单链表的头指针

//该算法在第i个结点后面插入其数值为x的新结点

    node *p=locate(head,i-1);//令p指向第i-1个结点

    if(p!=NULL)

    {

        node *q=(linklist)malloc(sizeof(node));

        q->data=x;//生成新结点,其数值为x

        q->next=p->data;

        p->next=q;//完成插入

    }

}

3.单向链表删除

void delete(node* head,int i,datatype e)

{//head是带头结点的单链表的头指针

    node *p=head;//初始化指针

    int j=0;//j为计数器

    while(p->next!=NULL&&j

    {

        p=p->next;j++;//寻找第i-1个结点

    }

    if(p->next!=NULL&&j==i-1)

    {

        node *q=p->next;//q指向p的下一个结点(即第i个结点)

        p->next=q->next;//删除第i个结点

        e=q->data;//保留第i个结点的值

        free(q);//释放q

    }

}

你可能感兴趣的:(数据结构,链表,数据结构)