当前位置:编程学习 > 网站相关 >>

数据结构-链表

#include<stdio.h>
#include<stdlib.h>
typedef int datatype;

typedef struct _node_
{
    datatype data;
    struct _node_ *next;
}linknode,*linklist;

linklist creat_empty_linklist()
{
    linklist h;

    h = (linklist)malloc(sizeof(linknode));
    h->next = NULL;

    return h;
}

int empty_linklist(linklist h)
{
    return NULL == h->next;
}

int lenth_linklist(linklist h)
{
    int len = 0;

    linklist p;

    p = h->next;
    //p = h;
    while(p != NULL)
    {
        len++;
        p = p->next;
    }

    return len;
}

void visit_linklist(linklist h)
{
    linklist p;
   
    printf("The linklist is :");
    p = h->next;
    while(p != NULL)
    {
        printf("%d->",p->data);
        p = p->next;
    }

    printf("\b\b    \n");   

    return ;
}

int insert_linklist_1(linklist h,datatype x,int pos)
{
    int i;
    linklist p, q;
   
    p = h;
    if((pos < 0) || (pos > lenth_linklist(h)))
    {
        return -1;
    }

    q = (linklist)malloc(sizeof(linknode));
    q->data = x;

    while(pos--)
    {
        p = p->next;
    }

    q->next = p->next;
    p->next = q;

    return 0;
}

void insert_linklist_2(linklist h, datatype x)
{
    linklist p, q;

    p = h;
    while((p->next != NULL) && (p->next->data <x))
    {
        p = p->next;
    }

    q = (linklist)malloc(sizeof(linknode));
    q->data = x;

    q->next = p->next;
    p->next = q;

    return ;
}

int delete_linklist_1(linklist h, int pos)
{
    linklist p, q;

    p = h;
    if((pos < 0) || (pos >= lenth_linklist(h)))    return -1;

    while(pos--)
    {
        p = p->next;
    }

    q = p->next;
    p->next = q->next;
    free(q);

    return 0;
}

int delete_linklist_2(linklist h, datatype x)
{
    linklist p, q;

    q = h;
    p = q->next;
    while(p != NULL)
    {
        if(p->data == x)
        {
            q->next = p->next;
            free(p);
            p = q->next;
        }
        else{
            q = q->next;
            p = q->next;
        }
    }
}
void clear_linklist(linklist h)
{
    linklist p,q;
    q=h;
    p=q->next;
    if(!empty_linklist(h))
    {
        while(p != NULL)
        {
            if(p->data!=NULL)
            {
                p->data=NULL;
            }
            else
            {
                q=q->next;
                p=q->next;
            }
        }
        /*教师
         while(p!==NULL)
         {
            q->next=p->next;
            free(p);
            p=q->next;
         }   
        */
        free(p);
    }
}
void reverse_linklist(linklist h)
{
    linklist p,q;
    p=h->next;
    if(!empty_linklist(h))
    {
        h->next=NULL;
        while(p!=NULL)
        {
            q=p;
            p=p->next;
            q->next=h->next;
            h->next=q;
        }
    }
}

int main()
{
    int i;
    linklist h,p,q;
    q=h;
    h =creat_empty_linklist();

    for(i=0; i<8; i++)
    {
        insert_linklist_1(h, 8+i, i);
    }

    while(q!=NULL)
    {
        q=q->next;
    }
    visit_linklist(h);

 

    if(empty_linklist(h) == 1){
        printf("是空链表!\n");
 &n

补充:综合编程 , 其他综合 ,
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,