码迷,mamicode.com
首页 > 其他好文 > 详细

单链表:头插法和尾插法

时间:2015-03-07 22:39:06      阅读:1686      评论:0      收藏:0      [点我收藏+]

标签:

头插法:

linklist *CreateList_Front()  
{  
    linklist *head, *p;  
    char ch;  
  
    head = NULL;  
    printf("依次输入字符数据(‘#’表示输入结束):\n");  
    ch = getchar();  
    while(ch != #)  
    {  
        p = (linklist*)malloc(sizeof(linklist));  
        p->data = ch;  
        p->next = head;  
        head = p;  
        ch = getchar();             //头插法算法简单 核心就两句p->next = head;head = p;  
    }  
    return head;  
}  
/*  随机产生n个元素的值,建立带表头结点的单链线性表L(头插法) */
void CreateListHead(LinkList *L, int n)
{
    LinkList p;
    int i;
    srand(time(0));                         /* 初始化随机数种子 */
    *L = (LinkList)malloc(sizeof(Node));
    (*L)->next = NULL;                      /*  先建立一个带头结点的单链表 */
    for (i=0; i < n; i++)
    {
        p = (LinkList)malloc(sizeof(Node)); /*  生成新结点 */
        p->data = rand()%100+1;             /*  随机生成100以内的数字 */
        p->next = (*L)->next;
        (*L)->next = p;                        /*  插入到表头 */
    }
}

其实理解的关键点在于

首次调用p->next = (*L)->next;  即p->next = null,然后让(*L)->next = p,如此此次创建的结点就作为了尾结点,链表输出变为了逆序

尾插法:

linklist *CreateList_End()  
{  
    linklist *head, *p, *e;  
    char ch;  
  
    head = NULL;  
    e = NULL;  
    printf("请依次输入字符数据(‘#‘表示输入结束):\n");  
    ch = getchar();  
    while(ch != #)  
    {  
        p = (linklist*)malloc(sizeof(linklist));  
        p->data = ch;  
        if(head == NULL)        //先判断输入的是不是第一个节点  
        {  
            head = p;             
        }  
        else  
        {  
            e->next = p;     //e始终指向输入的最后一个节点  
        }  
        e = p;  
        ch = getchar();           
    }  
    if(e != NULL)               //如果链表不为空,则最后节点的下一个节点为空  
    {  
        e->next = NULL;  
    }  
    return head;                //尾插法比头插法复杂一些,程序中要做两次判断,分别是判断第一个节点和最后一个节点的判断。且消耗多一个指针变量e。  
}  

 

单链表:头插法和尾插法

标签:

原文地址:http://www.cnblogs.com/CoolRandy/p/4320990.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!