链表知识技巧

一、创建单向链表,链表的每个结点有一个数据元素。从键盘输入若干个非零整数作为结点的数据元素

分析:
1.为简化链表操作中对表中有结点的情况处理,一般会在链表中在链表中增加一个结点,作为链表的第一结点,但该结点不放数据元素,特称之为头结点。
2.建立一个有头结点的单向链表,采用每次在链表的尾部增加一个结点的方式,将所有的结点链接起来。由于新结点是添加在单向链表的尾部,故需要设置一个指向表尾的指针变量q,且填添加一个新结点就要更新此新指针。

# include <stdio.h>
# include <stdlib.h>
# include <malloc.h>
struct Lnode
{
    int data;
    struct Lnode*next;
}*p,*q,*head; //*p为跟踪表的指针,q为指向新结点的指针,head是指向头结点的指针
main()
{
    int temp;
    head=(struct Lnode*)malloc(sizeof(struct Lnode));
    if(head==NULL)
    {
        printf("memonry allocating error!");
        exit(0);
    }
    head->next=NULL;
    p=head;
    printf("input a integer:");
    scanf("%d",&temp);
    while(temp!=0)
    {
        q=(struct Lnode*)malloc(sizeof(struct Lnode));
        if(q=NULL)
        {
            printf("memory allocating error!");
            exit(0);
        }
        q->data=temp;
        q->next=NULL;
        p->next=q;
        p=q;
        printf("input a integer:");
        scanf("%d",&temp);
    }

    return 0;
}

如果链表数据的顺序正好与输入的顺序一致,则可以把新结点添加在链表的头部,这样就不需要跟踪表尾指针,新建链表的效率更高。
代码如下:

# include <stdio.h>
# include <stdlib.h>
# include <malloc.h>
struct Lnode
{
    int data;
    struct Lnode*next;
}*p,*q,*head; //*p为跟踪表的指针,q为指向新结点的指针,head是指向头结点的指针
main()
{
    int temp;
    head=(struct Lnode*)malloc(sizeof(struct Lnode));
    if(head==NULL)
    {
        printf("memonry allocating error!");
        exit(0);
    }
    head->next=NULL;
    p=head;
    printf("input a integer:");
    scanf("%d",&temp);
    while(temp!=0)
    {
        q=(struct Lnode*)malloc(sizeof(struct Lnode));
        if(q=NULL)
        {
            printf("memory allocating error!");
            exit(0);
        }
        q->data=temp;
        q->next=head->next;
        head->next=q;
        printf("input a integer:");
        scanf("%d",&temp);
    }

    return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值