鱼C论坛

 找回密码
 立即注册
查看: 3394|回复: 9

简单链表的创建与输出 求详解 看不懂

[复制链接]
发表于 2012-4-2 21:26:26 | 显示全部楼层 |阅读模式
10鱼币
本帖最后由 Yogurt_lei 于 2012-4-3 10:38 编辑

求详解本链表程序   看不懂

# include <stdio.h>
# include <malloc.h>
# include <stdlib.h>

struct Node
{
    int data;            //数据域
    struct Node * pNext; //指针域
};

struct Node * CreatList(void);
void TraverseList(struct Node *);

int main(void)
{
    struct Node *pHead = NULL;

    pHead = CreatList(); //创建非循环单链表
    TraverseList(pHead);

    return 0;
}

struct Node * CreatList(void)
{
    int len, i, val;

        //分配存放一个不存放有效数据的头结点
    struct Node * pHead = (struct Node *)malloc(sizeof(struct Node));

    if (NULL==pHead)
    {
        printf("分配失败,终止程序!\n");
        exit(-1);
    }
    struct Node *pTail = pHead;
    pTail->pNext = NULL;

    printf("请输入你需要生成的链表的个数:len =");
    scanf("%d", &len);

    for ( i=0;i < len;++i )
    {
        printf("请输入第%d个节点的值:",i+1);
        scanf("%d", &val);

        struct Node * pNew = (struct Node *)malloc(sizeof(struct Node));
        if (NULL == pNew)
        {
            printf("分配失败,终止程序!\n");
            exit(-1);
        }
        pNew->data = val;
        pTail->pNext = pNew;
        pNew->pNext = NULL;
        pTail = pNew;
    }

    return pHead;
}

bool EmptyList(struct Node *pHead)
{
    if ( pHead->pNext == NULL )  //pHead->pNext == (*pHead).pNext
        return true;
    else
        return false;
}

void TraverseList(struct Node *pHead)
{
    struct Node *p = pHead->pNext;
       while (NULL != p)
       {
           printf("%d\n", p->data);
           p = p->pNext;
       }

    return;
}





主要是这一段逻辑不清楚
        pNew->data = val;

        pTail->pNext = pNew;

        pNew->pNext = NULL;

        pTail = pNew;


最佳答案

查看完整内容

pNew->data = val; 把刚才输入val的节点值赋给新的节点pNew的数据域 pTail->pNext = pNew; 把pNew这个结点插入到pTail这个节结点后面 pNew->pNext = NULL; 因为pNew后面没有结点了就把它的指针域用null赋值 pTail = pNew; 把pTail这个结点向后移一位变成pnew,让后面的赋值操作在一个循环里 有什么不懂得 ...
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2012-4-2 21:26:27 | 显示全部楼层
pNew->data = val;
                            把刚才输入val的节点值赋给新的节点pNew的数据域
pTail->pNext = pNew;
                           把pNew这个结点插入到pTail这个节结点后面
pNew->pNext = NULL;
                           因为pNew后面没有结点了就把它的指针域用null赋值

pTail = pNew;
                       把pTail这个结点向后移一位变成pnew,让后面的赋值操作在一个循环里

有什么不懂得可以继续问
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2012-4-2 21:34:23 | 显示全部楼层
建议看下[C程序设计(第四版)].谭浩强.扫描版中第九章9.4节开始的关于链表的知识,学习一下你应该可以懂了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2012-4-2 23:10:04 | 显示全部楼层
数据结构里面的东西啊,怎么会看不懂了?这不还有注释啊?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2012-4-3 00:37:28 | 显示全部楼层
应该具体指出哪里不懂吧
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2012-4-3 02:12:35 | 显示全部楼层
{:7_150:}具体点吧。。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2012-4-3 16:52:19 | 显示全部楼层
表示功力尚浅 没看懂  啥是单链表呀。。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2012-4-3 20:43:03 | 显示全部楼层
pNew->data = val;
                            把刚才输入val的节点值赋给新的节点pNew的数据域
pTail->pNext = pNew;
                           把pNew这个结点插入到pTail这个节结点后面
pNew->pNext = NULL;
                           因为pNew后面没有结点了就把它的指针域用null赋值

pTail = pNew;
                       把pTail这个结点向后移一位变成pnew,让后面的赋值操作在一个循环里

有什么不懂得可以继续问


想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2012-4-3 22:54:56 | 显示全部楼层

好像有那么点感觉了  不过还是 不是很清楚   数已经看了好几遍了 纠结了 是有些难哈  
不过还是谢谢了  
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2012-6-27 20:35:25 | 显示全部楼层
支持下楼主,继续加油啊!!!!!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-4-27 07:32

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表