• 数据结构C语言>3基本链表>39具有头结点的链表


    具有头结点的链表,就是有一个虚构的结点,链表的中第一个结点其实是第二个结点。

    #include<stdlib.h>

    struct llist
    {
        
    int num;
        
    struct llist *next;
    };
    typedef 
    struct llist node;
    typedef node 
    *llink;

    //输出结点值
    void printllist(llink head)
    {
        llink ptr;
        ptr
    =head->next;
        
    while(ptr !=NULL)
        {
            printf(
    "%d ",ptr->num);
            ptr
    =ptr->next;
        }
        printf(
    "\n");
    }

    //找结点
    llink findnode(llink head,int value)
    {
        llink ptr;
        ptr
    =head->next;
        
    while(ptr !=NULL)
        {
            
    if(ptr->num==value)
            {
                
    return ptr;
            }
            ptr
    =ptr->next;
        }
        
    return NULL;
    }

    //创造链表
    llink createllist(int *array,int len)
    {
        llink head;
        llink ptr,ptr1;
        
    int i;
        
        head
    =(llink)malloc(sizeof(node));
        
    if(head==NULL)
        {
            printf(
    "内存分配失败!\n");
            
    return NULL;
        }
        ptr
    =head;
        
    for(i=0; i<len;i++)
        {
            ptr1
    =(llink)malloc(sizeof(node));
            
    if(!ptr1)
            {
                
    return NULL;
            }
            ptr1
    ->num=array[i];
            ptr1
    ->next=NULL;
            ptr
    ->next=ptr1;
            ptr
    =ptr1;
        }
        
    return head;
    }

    //插入结点
    llink insertnode(llink head,llink ptr, int nodevalue,int value)
    {
        llink 
    new;
        
    new=(llink)malloc(sizeof(node));
        
    if(!new)
        {
            
    return NULL;
        }
        
    new->num=value;
        
    new->next=NULL;
        
    //找结点
        llink getnode;
        getnode
    =findnode(head,nodevalue);
        
    //如果没找到结点,就是插在第一个结点之前
        if(getnode ==NULL)
        {
            
    new->next=ptr->next;
            ptr
    ->next=new;
        }
        
    else//找到指定结点,就插在指定结点后面
        {
            
    new->next=getnode->next;
            getnode
    ->next=new;
            
        }
        
    return head;
    }





    int main(int argc,char *argv[])
    {
        
    int llist1[6]={1,2,3,4,5,6};
        llink head;
        
        head
    =createllist(llist1,6);
        
    if(!head)
        {
            exit(
    1);
        }
        printf(
    "原来的链表:");
        printllist(head);
        head
    =insertnode(head,head,6,23);
        printf(
    "插入后的链表:");
        printllist(head);
    }

    合乎自然而生生不息。。。
  • 相关阅读:
    实现一个程序两套快捷键
    SystemC中文教程一
    logback的使用和logback.xml详解
    mysql语句练习50题
    Intellij IDEA中使用Debug调试详解
    用node-webkit把web应用打包成桌面应用
    Idea导入项目详解
    iReport 5.6.0 Error: net.sf.jasperreports.engine.JRException: Error executing SQL statement for : data 最优解决方案
    CentOS 7.X 关闭防火墙
    将 MySQL root 的远程访问密码由空密码改为 password
  • 原文地址:https://www.cnblogs.com/samwu/p/2087524.html
Copyright © 2020-2023  润新知