zoukankan      html  css  js  c++  java
  • 数据结构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);
    }

    合乎自然而生生不息。。。
  • 相关阅读:
    《动手能力强与技术水平低》(2009/12/14)
    《为什么程序员被喻为“IT农民工”》(2009/12/12)
    对于关键字Ref和Out的理解
    2008世界500强排名(1100位)
    Javascript取select的选中值和文本
    使用 FreeNAS 下載 eMule
    程序员35岁后的三条出路
    二维条码 QR Code
    笔记本CPU性能排行榜Comparison of Mobile Processors (CPU Benchmarks)
    如何在C#中播放AVI短片并使背景透明
  • 原文地址:https://www.cnblogs.com/samwu/p/2087524.html
Copyright © 2011-2022 走看看