赞
踩
#include <stdio.h> #include <stdlib.h> typedef int ElemType; typedef struct LNode { ElemType data; struct LNode* next;//指向下一个结点 }LNode, * LinkList; //头插法新建链表 LinkList list_head_insert(LinkList& L) { LNode* s; int x; L = (LinkList)malloc(sizeof(LNode));//带头结点的链表 L->next = NULL;//L->data 里边没放东西 scanf("%d", &x);//从标准输入读取数据 //3 4 5 6 7 9999 while (x != 9999) { s = (LNode*)malloc(sizeof(LNode));//申请一个新空间给 s,强制类型转换 s->data = x;//把读取到的值,给新空间中的 data 成员 s->next = L->next;//让新结点的 next 指针指向链表的第一个元素(第一个放我们数据的元素) L->next = s;//让 s 作为第一个元素 scanf("%d", &x);//读取标准输入 } return L; } //打印链表中每个结点的值 void print_list(LinkList L) { L = L->next; while (L != NULL)//NULL 是为了代表一张空的藏宝图 { printf("%3d", L->data);//打印当前结点数据 L = L->next;//指向下一个结点 } printf("\n"); } int main() { LinkList L;//链表头,是结构体指针类型 list_head_insert(L);//输入数据可以为 3 4 5 6 7 9999,头插法新建链表 print_list(L);//链表打印 return 0; }
单链表结点的定义
typedef struct LNode{ //单链表结点类型
ElemType data; //数据域
struct LNode *next; //指针域
}LNode, *LinkList;
由于ElemType data 未定义,所以加
typedef int ElemType;
用list_tail_insert(L);这一个函数,如下
LinkList list_tail_insert(LinkList & L)
{
int x;
L = (LinkList)malloc(sizeof(LNode));
}
这里就要定义一个X,用来存放输入的元素。
需要在申请一个节点,在为这个节点申请一块空间用来指向新节点。做法和头结点类似。申请了空间后,就要把X放进去。
while其实就是在一次插入的情况下进行多次插入,而每次插入原理都是一样的
while (x != 9999) {
s = (LNode*)malloc(sizeof(LNode));
s->data = x;
r->next = s;//让尾部结点指向新结点
r = s;//r 指向新的表尾结点
scanf("%d", &x);
}
一定要记住,最后节点的next是NULL,不同于头插法,头插法第一个插入的就是最后一个,所以把该节点赋成NULL。尾节点是最后一个插入的节点的next才是NULL
r->next = NULL;//尾结点的 next 指针赋值为 NULL
打印列表就比较简单了
void print_list(LinkList L)
{
L = L->next;
while (L != NULL)//NULL 是为了代表一张空的藏宝图
{
printf("%3d", L->data);//打印当前结点数据
L = L->next;//指向下一个结点
}
printf("\n");
}
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。