数据结构——线性表的整表创建(头插法、尾插法)

本文详细介绍了使用头插法和尾插法创建链表的过程,并提供了完整的C语言代码实现。通过这两种方法,读者可以理解如何动态地创建链表,并掌握基本的数据结构操作。

线性表整表创建的思路:

对于每个链表来说,他所用的空间和大小是不需要预先制定,可以动态创建。即根据需要临时创建。所以创建创建链表的过程就是动态生成链表的过程,也即是空表初始状态起,依次建立结点然后插入链表中。

头插法

  • 初始化空链表L
  • 让L头节点的指针指向NULL,建立一个带头节点的链表
  • 手动输入数据
  • 循环:生成新节点node,将输入的数据作为node结点的指针域,将node结点插入头节点与前一个新节点之间。

    这里写图片描述
    代码:

//线性表创建,头插法
void CreateListHead(LinkList &L)
{
    LinkNode *node;
    Elemtype data;
    L = (LinkNode *)malloc(sizeof(LinkNode));//创建头节点
    L->next = NULL;//初始为空链表
    scanf("%d", &data);
    while (data != 0) //如果输入的数据是0,则结束创建链表
    {
        node = (LinkNode*)malloc(sizeof(LinkNode));//创建将要插入的结点
        node->data = data;//给新节点数据域赋值
        node->next = L->next;//将新节点插入链表头,头结点后
        L->next = node;
        scanf("%d", &data);
    }
}

尾插法

  • 1.初始化空链表L,让L头节点指针指向NULL,建立一个带头节点的空链表
  • 创建一个指向表尾的指针q
  • 输入数据
  • 循环:创建新节点p,将输入的数据作为新节点的数据域,将新节点插入到表尾
  • 表尾指针q置空。
    这里写图片描述

    代码:

void CreateListTail(LinkList &L)
{
    LinkNode *p;
    LinkNode *q;
    L = (LinkNode*)malloc(sizeof(LinkNode));//创建头节点
    L->next = NULL;//初始为空链表
    q = L;//尾指针,指向链表中尾节点
    int data;
    scanf("%d", &data);
    while (data != 0)//如果输入的数据是0,则结束创建链表
    {
        p = (LinkNode*)malloc(sizeof(LinkNode));//创建新节点
        p->data = data;
        q->next = p;//将新节点插入链表尾
        q = p;
        scanf("%d", &data);
    }
    q->next = NULL;//尾结点指针指空。
}

全部代码

#pragma warning(disable:4996);
#include<stdio.h>
#include<stdlib.h>
//http://c.biancheng.net/cpp/html/2671.html参考
typedef int Elemtype;
typedef struct LinkNode
{
    Elemtype data;
    struct LinkNode *next;
}LinkNode,*LinkList;
//线性表创建,头插法
void CreateListHead(LinkList &L)
{
    LinkNode *node;
    Elemtype data;
    L = (LinkNode *)malloc(sizeof(LinkNode));//创建头节点
    L->next = NULL;//初始为空链表
    scanf("%d", &data);
    while (data != 0) //如果输入的数据是0,则结束创建链表
    {
        node = (LinkNode*)malloc(sizeof(LinkNode));//创建将要插入的结点
        node->data = data;//给新节点数据域赋值
        node->next = L->next;//将新节点插入链表头,头结点后
        L->next = node;
        scanf("%d", &data);
    }
}
//线性表创建 尾插法
//1.初始化空链表L,让L头节点指针指向NULL,建立一个带头节点的空链表
//创建一个指向表尾的指针q
//2输入数据
//3.循环:创建新节点p,将输入的数据作为新节点的数据域,将新节点插入到表尾
//4.表尾指针q置空。
void CreateListTail(LinkList &L)
{
    LinkNode *p;
    LinkNode *q;
    L = (LinkNode*)malloc(sizeof(LinkNode));//创建头节点
    L->next = NULL;//初始为空链表
    q = L;//尾指针,指向链表中尾节点
    int data;
    scanf("%d", &data);
    while (data != 0)//如果输入的数据是0,则结束创建链表
    {
        p = (LinkNode*)malloc(sizeof(LinkNode));//创建新节点
        p->data = data;
        q->next = p;//将新节点插入链表尾
        q = p;
        scanf("%d", &data);
    }
    q->next = NULL;//尾结点指针指空。
}
void PrintList(LinkList &L)
{
    LinkList p = L->next;
    while (p)
    {
        printf("%d ", p->data);
        p = p->next;
    }
    printf("\n");
}
int main()
{
    LinkList L;
    CreateListHead(L);
    printf("头插法");
    PrintList(L);
    LinkList P;
    CreateListTail(P);
    printf("尾插法");
    PrintList(P);
    system("pause");
    return 0;
}

运行结果:
这里写图片描述

参考资料…

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值