zoukankan      html  css  js  c++  java
  • 简单数据结构之链表(无头节点)

    /************************************************************************************** 
    * Function     : 链表学习
    * Create Date  : 2014/05/13 
    * Author       : NTSK13 
    * Email        : beijiwei@qq.com 
    * Copyright    : 欢迎大家和我一起交流学习,转载请保持源文件的完整性。 
    *                任何单位和个人不经本人允许不得用于商业用途 
    * Version      : V0.1                    
    ***************************************************************************************                    
    简单数据结构之链表(无头节点)
         
    **************************************************************************************/  
    #include<stdio.h>  
    #include<stdlib.h>
    #include<malloc.h>
    
    typedef struct node //建立节点 数据结构
    {
        int data;
        struct node *next;
    }Lnode;
    
    void init_list(Lnode *ph)//链表初始化
    {
        ph=NULL;
    }
    
    int get_length(Lnode *ph)
    {
        int len=0;
        Lnode *ptmp=ph;
        if(ph==NULL)
            return (0);
        while(ptmp->next)
        {
            len++;
            ptmp=ptmp->next;
        }
        return (len+1);
    }
    int search_list(Lnode * ph,int val)//查找链表元素
    {
        Lnode *ptmp=ph;
        while( ptmp->next != NULL)
        {
            if(ptmp->data == val )
                return (1);
            ptmp=ptmp->next;
        }
        return (0);
    }
    void insert_head_list(Lnode ** ph,int val)//插入链表元素  插头
    {
        Lnode *ptmp=NULL;
        ptmp=(Lnode *)malloc( sizeof(Lnode) );
        if(ptmp==NULL)
        {
            printf("Allocate memory fail !!! 
    ");
            fflush(stdout);
        }
        ptmp->data=val;
        ptmp->next=*ph;
        *ph=ptmp;
    }
    
    void insert_tail_list(Lnode **ph,int val)//插入链表元素  插尾
    {
        Lnode *ptmp=NULL;
        Lnode *pht=*ph;
        ptmp=(Lnode *)malloc( sizeof(Lnode) );
        if(ptmp==NULL)
        {
            printf("Allocate memory fail !!! 
    ");
            fflush(stdout);
        }
        ptmp->data=val;
        ptmp->next=NULL;
        if(*ph==NULL)
        {
            *ph=ptmp;
        }else
        {
            while( (*ph)->next!=NULL)
                *ph=(*ph)->next;
            (*ph)->next=ptmp;
            *ph=pht;
        }
    }
    
    void delete_nth_list(Lnode **ph,int n)//删除链表第n元素 n= 0,1,2,...
    {
        int i=0;
        Lnode *pre=NULL;
        Lnode *post=NULL;
        pre=post=*ph;
    
        if(n==0)
        {
            *ph=(*ph)->next;
            free(pre);
        }else
        {
            while(i != n)
            {
                pre=post;
                post=post->next;
                i++;
            }
            pre->next=post->next;
            free(post);
        }
    }
    
    
    void traverse_list(Lnode *ph)//遍历链表
    {
        int len=get_length(ph);//获取链表长度
        int i=0;
        Lnode *ptmp=ph;
        for(i=0;i<len;i++)
        {
            printf("%d 
    ",ptmp->data);
               fflush(stdout);
            ptmp=ptmp->next;
        }
    }
    
    void traverse_list2(Lnode *ph)//遍历链表
    {
        Lnode *ptmp=ph;
        while(ptmp->next)
        {
            printf("%d 
    ",ptmp->data);
               fflush(stdout);
            ptmp=ptmp->next;
        }
    }
    
    void destroy_list(Lnode **ph)
    {
        Lnode *ptmp=*ph;
        while(  (*ph)->next )
        {
            ptmp=*ph;
            *ph=(*ph)->next;
            free(ptmp);
        }
        *ph=NULL;
    }
    
    int main()  
    {  
        Lnode * phead=NULL;//定义头指针
        int array[5]={0,1,2,3,4};
        int i=0;
    
        for(i=0;i<5;i++)
        {
            insert_tail_list(&phead,array[i]);
        }
        traverse_list(phead);
        delete_nth_list(&phead,2);//删除链表第2个元素  0,1,2,...
        printf("
    
    ");
        traverse_list(phead);
    
    
        printf("
    
    ");
        for(i=0;i<5;i++)
        {
            insert_head_list(&phead,array[i]);
        }
        
        traverse_list2(phead);
        printf("
    
    ");
    
        printf("%d 
    ",search_list(phead,2) );//查找链表元素
        destroy_list(&phead);
        return (0);
    }  
       
  • 相关阅读:
    muduo 库解析之四:TimeZone
    muduo 库解析之三:Date
    muduo 库解析之九:Condition
    muduo 库解析之八:Mutex
    muduo 库解析之七:Atomic
    [linux]查看文件目录是否为硬链接
    [go] 解决:concurrent write to websocket connection
    [windows] 保存浏览器网页长截图
    [项目] 系统迁移的几个注意点
    [MySQL] order by field 自定义排序
  • 原文地址:https://www.cnblogs.com/ntsk13/p/3728217.html
Copyright © 2011-2022 走看看