链表的实现

1.声明如下

#include "stdio.h"
#include "stdlib.h"

typedef int DataType;  
struct Node;//单链表结点类型
typedef struct Node * PNode;//结点指针类型

//单链表结点结构
struct Node {
    DataType info;
    PNode link;
    
};

typedef struct Node * LinkList;

2.

//创建一个空链表
LinkList createNullLinkList()
{
    LinkList list=(LinkList)malloc(sizeof(struct Node));

    if (list!=NULL) 
    {
        list->link=NULL;
    }
    else
    {
        printf("Out of space! \n");
    }
    return list;
}

3.

//判断单链表是否为空
int isNullLinkList(LinkList list)
{
    return (list->link==NULL);
}

4.

//在单链表中谋求某元素的存储位置,找第一个值为X的结点
PNode locateLink(LinkList list,DataType x)
{
    PNode p;
    if(list==NULL)
    {
        return NULL;
    }
    p=list->link;
    while (p!=NULL&&p->info!=x) 
    {
        p=p->link;
    }

    return p;
}

5.

//单链表的插入,在list带头结点的单链表中,p所指结点后面插入元素
int insertPostLink(LinkList list,PNode p,DataType x)
{
    PNode q=(PNode)malloc(sizeof(struct Node));
    if(q==NULL)
    {
        printf("out of space! \n");
        return 0;
    }
    else
    {
        
        q->info=x;
        q->link=p->link;    
        p->link=q;
        return 1;
    }
}

6.

//在单链表的最后一个元素插入结点
int insertNodePostLastNode(LinkList list,DataType x)
{
    PNode q=(PNode)malloc(sizeof(struct Node));
    
    while (list->link!=NULL) 
    {
        list=list->link;
    }
    
    q->info=x;
    list->link=q;
    return 1;

}

7.

//在单链表中求p所指结点的前区结点
PNode locatePreLink(LinkList list,PNode p)
{
    PNode p1;
    if (list==NULL)
    {
        return NULL;
    }
    p1=list;
    while (p1!=NULL&&p1->link!=p) 
    {
        p1=p1->link;
    }
    return p1;
}

8.

//单链表的删除
int deleteVLink(LinkList list,DataType x)
{
    PNode p,q;
    p=list;
    if(p==NULL)
    {
        return 0;
    }
    while (p->link!=NULL&&p->link->info!=x) 
    {
        p=p->link;
    }
    if(p->link==NULL)
    {
        printf("Not Exist! \n");
        return 0;
    }
    else
    {
        q=p->link;
        p->link=q->link;
        free(q);
        return 1;
    }
}

9.测试

int main()
{
    PNode p;
    PNode q;
    int i;
    LinkList list;
    
    list=createNullLinkList();
                
    i=insertPostLink(list,list,32);
    insertPostLink(list,list,42);

    i=insertNodePostLastNode(list,33);

    q=locateLink(list,42);

    i=q->info;
    printf("%d",i);


}

 

 

posted on 2012-05-02 23:35  yucong  阅读(205)  评论(0)    收藏  举报

导航