单链表的链式存储的两种插入方式

/* 头插法建立单链表示例 */

void CreateListHead(LinkList *L, int n)
{
LinkList p;
int i;

srand(time(0)); // 初始化随机数种子

*L = (LinkList)malloc(sizeof(Node));
(*L)->next = NULL;

for( i=0; i < n; i++ )
{
p = (LinkList)malloc(sizeof(Node)); // 生成新结点
p->data = rand()%100+1;
p->next = (*L)->next;
(*L)->next = p;
}
}

/* 尾插法建立单链表演示 */

void CreateListTail(LinkList *L, int n)
{
LinkList p, r;
int i;

srand(time(0));
*L = (LinkList)malloc(sizeof(Node));
r = *L;

for( i=0; i < n; i++ )
{
p = (Node *)malloc(sizeof(Node));
p->data = rand()%100+1;
r->next = p;
r = p; // 备注:初学者可能很难理解这句,重点解释。
}

r->next = NULL;
}

最后两句其实就是多增加了一个Node数据类型的变量,用它不停指向最后一个节点。然后在下一次循环中r又帮忙把最后一个节点的Next指针指向新的节点p

时间: 2024-10-31 03:12:50

单链表的链式存储的两种插入方式的相关文章

单链表的链式存储总结

基本数据结构之-单链表的链式存储 链表是一种插和删除元素很便捷的数据结构,原因是它存储的数据在内存中不连续,可以根据需要自己动态开辟. 和数组比较起来主要的缺点就是不能随机访问,如果是单链表,那么要访问一个数据,必须从头开始遍历一次! 对于基本数据结构围绕增删查改等操作,单链表的改可以通过删和增的结合来操作.因此就不用代码来表示了! 任何一个数据结构都有它的基本的数据结构,这儿给出一种用void *代替的写法 基本的数据结构的定义: // 定义指针的结构体 typedef struct _LIN

对于链表的链式存储的初始化操作,遇到的有关“二级指针”的知识小结

首先解释一下“二级指针”: 一级指针所关联的是其值(一个地址)名下空间里的数据,这个数据可以是任意类型并做任意用途,但二级指针所关联的数据只有一个类型一个用途,就是地址. 指针就是两个用途:提供目标的 读取 或 改写, 那么二级指针就是为了提供对于内存地址的读取或改写. 指针的表现形式是地址,核心是指向关系指针,运算符“*”的作用是按照指向关系访问所指向的对象. 如果存在A指向B的指向关系,则A是B的地址,“*A”表示通过这个指向关系间接访问B. 如果B的值也是一个指针,它指向C,则B是C的地址

线性表带头结点的单链表的链式表示和实现

带有头结点的单链表的12个基本操作 #define DestroyList ClearList//DestroyList()和ClearList()的操作是一样的 void InitList(LinkList &L){ L = NULL; } void ClearList(LinkList &L){ LinkList p; while (L){ p = L; L = L->next; free(p); } } Status ListEmpty(LinkList L){ if (L)r

单链表的链式结构表示

from:shiyanlou 1 #include <stdio.h> 2 #include <stdlib.h> 3 4 #define TRUE 1 5 #define FALSE 0 6 #define OK 1 7 #define ERROR 0 8 #define OVERFLOW -2 9 10 typedef int ElemType; 11 typedef int Status; 12 13 /* 14 * 存储结构 15 */ 16 typedef struct

复杂链表的复制(递归的两种实现方式)

题目描述:输入一个复杂链表(每个节点中有节点值,以及两个指针,一个指向下一个节点,另一个特殊指针指向任意一个节点), 返回结果为复制后复杂链表的head. (注意,输出结果中请不要返回参数中的节点引用,否则判题程序会直接返回空) 一.常见的递归实现方式 1 /* 2 public class RandomListNode { 3 int label; 4 RandomListNode next = null; 5 RandomListNode random = null; 6 7 RandomL

2-5-归并链式存储的单链表-线性表-第2章-《数据结构》课本源码-严蔚敏吴伟民版

课本源码部分 第2章  线性表 - 归并单链表(链式存储) ——<数据结构>-严蔚敏.吴伟民版        源码使用说明  链接??? <数据结构-C语言版>(严蔚敏,吴伟民版)课本源码+习题集解析使用说明        课本源码合辑  链接??? <数据结构>课本源码合辑        习题集全解析  链接??? <数据结构题集>习题解析合辑        本源码引入的文件  链接? SinglyLinkedList.c        相关测试数据下载

04.线性表(三)链式存储结构.单链表2

链式存储结构.单链表2 顺序存储结构的创建实质是一个数组的初始化,存储空间连续且其大小和类型已经固定:单链表存储空间不连续,是一种动态结构且它所占用空间的大小和位置是不需要预先分配划定的,可以根据系统的情况和实际的需求即时生成. 一.单链表的整表创建 创建单链表的过程就是一个动态生成链表的过程,即从"空表"的初始化起,依次建立各元素结点,并逐个插入链表. 1.算法思路 (1)声明一个结点p和计数器变量i; (2)初始化一空链表L (3)让链表L的头结点的指针指向NULL,即建立一个带头

【数据结构】链式存储单链表

数据结构之单链表的链式存储实现 //====================================================================== // // Copyright (C) 2014-2015 SCOTT // All rights reserved // // filename: List.c // description: a demo to display SeqList // // created by SCOTT at 01/28/2015

简要比较线性表的顺序存储结构和链式存储结构

我们分别从存储分配方式.时间性能.空间性能三方面来做对比. 存储分配方式 顺序存储结构用一段连续的存储单元依次存储线性表的数据元素. 单链表采用链式存储结构,用一组任意的存储单元存放线性表的元素. 时间性能 <1>查找 顺序存储结构O(1) 单链表O(n) <2>插入和删除 顺序存储结构需要平均移动表长一半的元素,时间为O(n) 单链表在计算出某位置的指针后,插入和删除时间仅为O(1) 空间性能 顺序存储结构需要预分配存储空间,分大了,容易造成空间浪费,分小了,容易发生溢出. 单链