单链表的创建(带头结点和不带头结点)
伪代码:
创建结点
创建头结点(单独定义一个结构体来保存单链表的首地址和尾地址还有链表的长度)
创建带头结点的单链表
注意:创建头结点中的首尾指针都要指空,长度等于0;
从终端接收数据
创建结点保存数据: 创建的节点的 next要指空
插入节点:如果是第一个节点那么就将头结点的首尾指针都指向这个结点 (判断条件可以是链表的长度,也可是首尾结点是否为空 是 head->next为不为空 ),如果不为空,尾结点的next指向新节点,让新节点成为尾结点
// 创建节点
typedef struct node
{int date;struct node* next;
}node;// 创建头结点
typedef struct
{node* first; // 创建节点接收单链表的首地址node* last; // 接收点链表的尾地址int length;}head;/* CreatLinkListhead:创建一个带头结点的单链表
*/
head* CreatLinkListhead()
{// 创建头结点head* h= malloc(sizeof(head));h->first=h->last=NULL;h->length=0;while (1){// 从中断获取数据int d;scanf("%d",&d);if(d==0){break;}// 创建一个节点去接收数据node *p= malloc(sizeof(node));p->next=NULL;p->date=d;// 插入到链表中if(h->length==0){h->first=h->last=p;}else{h->last->next=p;h->last=p;}h->length++;}return h;
}
创建不带头结点的单链表:
需要定义首指针(相当于标记作用,用来标记头的),尾指针
定义后需要指空
从终端输入数据
创建结点接收数据
判断结点是否为空插入节点(条件是此时的首尾指针为空)
node* CreatLinkList()
{// 创建头指针,尾指针node *first=NULL;node* last=NULL;// 重终端输入数据int d;while (1){scanf("%d",&d);if(d==0){break;}// 创建新节点接收数据node* p= malloc(sizeof(node));p->date=d;p->next=NULL;if(first==NULL){last=first=p;}else{ last->next=p;last=p;}}return first;}
打印链表的函数: 从链表的首节点开始打印的 若创建的是带头点的单链表 需要传入 head->next
主函数里面 创建的带头的单链表 就用一个 头指针去接收 创建的不带头的 就用头指针去接受
全部代码:
#include<stdio.h>
#include<stdlib.h>typedef int Elempty;// 创建节点
typedef struct node
{int date;struct node* next;
}node;// 创建头结点
typedef struct
{node* first; // 创建节点接收单链表的首地址node* last; // 接收点链表的尾地址int length;}head;/* CreatLinkListhead:创建一个带头结点的单链表
*/
head* CreatLinkListhead()
{// 创建头结点head* h= malloc(sizeof(head));h->first=h->last=NULL;h->length=0;while (1){// 从中断获取数据int d;scanf("%d",&d);if(d==0){break;}// 创建一个节点去接收数据node *p= malloc(sizeof(node));p->next=NULL;p->date=d;// 插入到链表中if(h->length==0){h->first=h->last=p;}else{h->last->next=p;h->last=p;}h->length++;}return h;
}node* CreatLinkList()
{// 创建头指针,尾指针node *first=NULL;node* last=NULL;// 重终端输入数据int d;while (1){scanf("%d",&d);if(d==0){break;}// 创建新节点接收数据node* p= malloc(sizeof(node));p->date=d;p->next=NULL;if(first==NULL){last=first=p;}else{ last->next=p;last=p;}}return first;}void PrintList(node* list)
{while (list){printf("%d",list->date);list=list->next;}}int main(int argc, char const *argv[])
{#if 0head *list =CreatLinkListhead(); // 创建带头结点的链表PrintList(list->first); // 传入链表的首节点#endif#if 1node *list =CreatLinkList(); // 创建不带头结点的链表PrintList(list); // 传入链表的首节点#endifreturn 0;
}
创建带头结点的单链表也可以用一个函数来创建
在创建头结点的时候也可以直接在函数中创建头结点,在判断的时候便是 head->next 为空新节点就接在后面
总结: 带不带头结点就看要不要多生成一个节点,头结点需要开辟空间,判断的时候就从头结点的下一位判断 : 若不带头结点,就生成一个头指针,将第一个节点赋值给头指针,
打印链表: 是从第一个节点开始打印的
单链表的创建(带头结点和不带头结点)相关推荐
- 不带头结点的单链表的创建(头插法和尾插法)
1.用头插法建立不带头结点的单链表 #include<iostream> using namespace std;//单链表的结构体 typedef struct Node {int da ...
- java带头结点的单链表_自己实现集合框架 (五): 带头结点单链表的实现
这是系列文章,每篇文章末尾均附有源代码地址.目的是通过模拟集合框架的简单实现,从而对常用的数据结构和java集合有个大概的了解.当然实现没有java集合的实现那么复杂,功能也没有那么强大,但是可以通过 ...
- java带头节点的单链表_自己实现集合框架(五):带头结点单链表的实现
这是系列文章,每篇文章末尾均附有源代码地址.目的是通过模拟集合框架的简单实现,从而对常用的数据结构和java集合有个大概的了解.当然实现没有java集合的实现那么复杂,功能也没有那么强大,但是可以通过 ...
- 单链表的创建--从零开始
2021.2.14更新 结合很多小伙伴的困惑,博主录制了一个视频讲解,如果大家感兴趣,欢迎跳转到我的b站视频<单链表的创建-从零开始>(P.S.这是我录制的第一个视频,因为是在晚上,怕打扰 ...
- c语言 链表建立头插法尾插法,单链表的创建(头插法和尾插法)
单链表的创建分为头插法和尾插法,头插法是不断地向头结点插入新的结点.这样会使你所插入的结点值呈现逆序,所以头插法也可以实现单链表的逆置.尾插法是不断地向插入的新元素之后再插入新的元素.需要注意的是头插 ...
- 单链表的创建,插入,删除以及查找
本文章依据学校的实验作业完成 目录 前言 一.链表是什么? 1.概念 2.链表的分类 二.单链表的创建,插入,删除以及查找 1.单链表的存储结构 2.单链表的创建 3.单链表的插入 4.单链表的删除 ...
- java单链表输出_数据结构基础------1.线性表之单链表的创建与输出方法(Java版)...
基础知识: 线性表(linear list),是其组成元素间具有线性关系的一种线性结构. 线性表有 ①顺序存储结构(sequential storage structure) 顺序存储结构可以简单的理 ...
- java增加 删除 修改表格_Java实现单链表的创建、添加、修改、删除
packagelinkedlist;//单链表的创建.添加插入.修改.删除 public classSingleLinkedListDemo {public static voidmain(Strin ...
- python单链表操作_单链表的创建、增删改查等操作(Python实现)
单链表的创建.增删改查等操作(Python实现) # 单链表 class Node: def __init__(self, elem): self.elem = elem self.next = No ...
- 单链表的创建、插入、删除、倒置操作
/*-----------------------------------------------------*/ /*--------------单链表的创建.插入.删除.倒置操作--------- ...
最新文章
- 协作机器人与传统机器人有何区别?
- UOJ.311.[UNR#2]积劳成疾(DP)
- Python中的字典排序
- ACM中Java输入输出
- 6.二元查找树的后序遍历结果[PostOrderOfBST]
- 登陆 tomcat manager
- Applet授权细节
- php正则循环,PHP正则解析多重循环模板示例
- 欧姆龙cp1h指令讲解_OMRON CP1H脉冲指令说明总结
- 红米AC2100刷固件心得
- 基于matlab测量物体直径,基于MATLAB的不规则面积图像测量
- Android 百度离线地图下载完后调用下载好的离线包
- QT xml转ini的实现(从C#转到QT)
- 我们公司的短信接口被刷了,瞬间损失两万,怎么解决?(短信接口被盗刷系列1)
- 【数据库】python连接数据库(保姆式服务,一口一口喂啊歪)
- 面向未来,我们来聊一聊什么是现代化数据架构
- HEVC算法和体系结构:编码框架
- html5设置春联,英文版春节对联
- 用javascript 编写的“打豆豆”游戏
- XML的基本概念和Android下的使用
热门文章
- 字符串转换成整数(3种方法)
- lululemon系列二:创业如生子,创始人的基因决定了公司的基因
- 呼吸灯代码linux,ESP32 开发笔记(三)源码示例 3_LEDC_PWM 使用LEDC实现LED呼吸灯
- python程序 led灯闪烁_树莓派python编程 做一个LED呼吸灯
- 新能源汽车兴起,神州租车成为新能源发展的重要推手
- 计算机硬件我五大部分组成部分,硬件系统的五大组成部分
- ⑤电子产品拆解分析-人体感应灯
- 分布式事务之 Atomikos
- 【PAT乙级】数字加密
- npm 安装报错 code EPERM syscall mkdir