线性表整表创建的思路:
对于每个链表来说,他所用的空间和大小是不需要预先制定,可以动态创建。即根据需要临时创建。所以创建创建链表的过程就是动态生成链表的过程,也即是空表初始状态起,依次建立结点然后插入链表中。
头插法
- 初始化空链表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;
}
运行结果: