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

来源:互联网 发布:轮胎改装计算器软件 编辑:程序博客网 时间:2024/06/08 07:47

线性表整表创建的思路:

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

头插法

  • 初始化空链表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;}

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

参考资料…

0 0