期末复习6--链表头插法(逆序)尾插法(顺序)---输出链表

头插法 

#include <stdio.h>
#include <stdlib.h>struct Node    //定义结构体
{char data;   //数据域struct Node * next;        //指针域
};/* 请在这里填写答案 */void PrintList (struct Node * head)
{struct Node * s;if(head == NULL){printf("None");return;}for(s=head;s!=NULL;s = s->next){printf("%c ",s->data);}
}int main()
{struct Node * head = NULL;head = CreateList(head);PrintList(head);return 0;
}

头插法的步骤

1.新节点 struct  Node* p;

2.新节点开空间  p=(struct Node*)malloc(sizeof(struct Node));

3.数据存储 p -> data = ch;

4.头插法重点顺序

p->next = head;

head=p;

5.切记要再scanf("%c",&ch);-------完整循环

struct Node* CreateList (struct Node * head)
{struct Node* p;char ch;scanf("%c",&ch);while(ch!='\n'){p=(struct Node *)malloc(sizeof(struct Node));p->data=ch;p->next=head;head=p;scanf("%c",&ch);}return head;
}

尾插法:

#include <stdio.h>
#include <stdlib.h>typedef struct Node {  // 定义结构体类型,并且用 typedef 简化声明char data;         // 数据域struct Node * next;// 指针域
} Node;// 尾插法创建链表
Node * createListTailInsertion() 
{Node *head, *temp, *newnode;char ch;head = NULL;scanf("%c", &ch); // 获取第一个字符while (ch != '\n') {newnode = (Node*) malloc(sizeof(Node)); // 创建新节点newnode->data = ch;                      // 赋值给新节点的数据域newnode->next = NULL;                    // 设置新节点的下一个为nullif (head == NULL)                        // 如果是第一个节点,则设置头指针指向新节点head = temp = newnode;else                                     // 否则将新节点添加到链表末尾{temp->next = newnode;                // 将最后一个节点的指针域指向新节点temp = newnode;                      // 更新最后一个节点指针}scanf("%c", &ch);                        // 获取下一个字符}return head;                                // 返回链表头
}// 打印链表
void printList(Node * head)
{Node * s;if(head == NULL){printf("None\n");return;}for(s=head;s!=NULL;s = s->next){printf("%c ",s->data);}printf("\n");                               // 输出换行符以使输出更清晰
}int main()
{Node * head = NULL;head = createListTailInsertion();           // 使用尾插法创建链表printList(head);                            // 打印链表return 0;
}

 尾插法步骤:

1.比头插法多一个尾结点*tail;

struct Node* head,* tail, * p;

2.头插尾插都需要 char ch;----表示数据

3.scanf("%c",&ch)

4.新指针节点开空间 p = (struct Node*)malloc(sizeof(struct Node))

5.存储数据   p->data = ch;

                   p->next = NULL;

6.头指针的可能性

head ==NULL-------- head = tail = p; // 头指针是第一个节点,设置头指针指向新节点

head != NULL--------tail -> next = p; tail = p;

7.切记 scanf ("%c",&ch);

返回head;

输出链表:

for (head; head!=NULL; head=head->next)

{

printf("%c",head->data);

}

总结注意易错点:

1.while循环里一定要写成 ch!='\n'循环后面一定要加上 scanf("%c",&ch);---更新数据

不要写成scanf("%c",&ch)!=EOF

否则就不会输出第一个字母

2.头插法和尾插法非常重要的记忆方法:

头插法开始只是struct *head,*p;-------尾插法struct *head,*tail,*p;

头插法开始head=NULL ---------- 尾插法 head = tail =NULL;

头插法循环里  if (head==NULL) ----head = p;

                       else { p->next = head;

                                  head=p;---更新头结点}

尾插法循环里  if(head==NULL)-------head=tail=p;

                        else{ tail->next = p;

                                tail=p;--更新尾结点}

Node * createListTailInsertion() 
{struct Node*head,*p;char ch;scanf("%c",&ch);head=NULL;while(ch!='\n')//while(scanf("%c",&ch)!=EOF)// while(1){//if(scanf("%c",&ch)!=1||ch=='\n')break;p=(struct Node*)malloc(sizeof(struct Node));p->data=ch;p->next=NULL;if(head==NULL)  head=p;else{p->next = head;head=p;}scanf("%c",&ch);}return head;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/28640.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

mybatisplus 笔记

int isDelete userRoleMapper.delete(new LambdaQueryWrapper<UserRole>().in(UserRole::getUserId, roleUserDTO.getUserId()).in(UserRole::getRoleId, roleUserDTO.getRoleId()));LambdaQueryWrapper<UserRole>: LambdaQueryWrapper 是 MyBatis Plus 提供的一个…

Apipost模拟HTTP客户端

模拟HTTP客户端的软件有很多&#xff0c;其中比较著名的就有API-FOX、POSTMAN。 相信很多小伙伴都使用POSTMAN。这篇博客主要介绍Apipost的原因是&#xff0c;Apipost无需下载&#xff0c;具有网页版。 APIFOX的站内下载&#xff1a; Api-Fox&#xff0c;类似于PostMan的软件…

时间复杂度和空间复杂度的深入解析

在算法和数据结构的学习中&#xff0c;时间复杂度和空间复杂度是两个至关重要的概念。它们分别用于衡量算法在执行过程中所需的计算资源&#xff08;时间&#xff09;和存储资源&#xff08;空间&#xff09;。以下&#xff0c;我们将从技术难点、面试官关注点、回答吸引力以及…

JavaFX 节点

JavaFX Node类javafx.scene.Node是添加到JavaFX 场景图的所有组件 的基类&#xff08;超类&#xff09; 。JavaFX Node 类是抽象的&#xff0c;因此你只需将 Node 类的子类添加到场景图中。场景图中的所有 JavaFX Node 实例共享一组由 JavaFX Node 类定义的公共属性。本 JavaFX…

毕节前端工程师前景怎么样:深入剖析与全面展望

毕节前端工程师前景怎么样&#xff1a;深入剖析与全面展望 在数字化浪潮的推动下&#xff0c;前端工程师作为连接技术与用户的桥梁&#xff0c;其职业前景备受关注。毕节地区的前端工程师同样面临着机遇与挑战并存的局面。那么&#xff0c;毕节前端工程师的前景究竟如何呢&…

【Ruby爬虫01】某吃瓜网站图片数据采集

介绍 由于最近在学习Ruby&#xff0c;写一个爬虫锻炼一下。涉及xml解析、多线程、xpath语法等基础知识。 实现代码 使用说明 使用前请先安装如下gem gem install nokogiri http openssl# nokogiri&#xff1a;一个解析xml和html的库&#xff0c;支持css、xpath语法 # htt…

一文了解Redis

一.什么是Redis 与MySQL一样&#xff0c;Redis也是客户端服务器结构的程序&#xff0c;是基于内存的键值对存储系统&#xff0c;属于NoSQL的一种。与很多键值对数据库不同的是&#xff0c;Redis 中的值可以是由 string&#xff08;字符串&#xff09;、hash&#xff08;哈希&a…

高速缓存是怎么让CPU找到地址内容的?

这个场景在性能优化下&#xff0c;应该很少会用到。但是还是总结一下。 Input: CPU给的一个地址&#xff0c;例如 0xffads1233423 Out: 这个地址上的值。 WORKFLOW CPU 问高速缓存&#xff0c;高速缓存会拿这个地址的中间几个位置&#xff0c;组成一个key高速缓存拿着这个ke…

数学中的虚数单位 i 和电学中的虚数单位 j

什么是虚数&#xff1f; 虚数是扩展实数概念的一类数&#xff0c;能够解决某些在实数范围内无法解决的问题。虚数的基本单位是 (i)&#xff0c;定义为&#xff1a; i − 1 i \sqrt{-1} i−1 ​ 这意味着 (i) 的平方是 -1&#xff1a; i 2 − 1 i^2 -1 i2−1 为什么需要虚…

【算法专题--链表】删除排序链表中的重复元素II -- 高频面试题(图文详解,小白一看就懂!!)

目录 一、前言 二、题目描述 三、解题方法 ⭐ 双指针 -- 采用 哨兵位头节点 &#x1f95d; 什么是哨兵位头节点&#xff1f; &#x1f34d; 解题思路 &#x1f34d; 案例图解 四、总结与提炼 五、共勉 一、前言 删除排序链表中的重复元素II元素这道题&#xff0c…

【JKI SMO】框架讲解(二)

JKI State Machine 讲解 将JKI State Machine 模板拖曳到程序框图中&#xff0c; 如下图&#xff0c; 此模板会默认放置一个OK按钮在前面板中&#xff0c;用于提示用户如何增加一个简单的用户事件去使用此框架。 “Event Structure”&#xff0c;Idle&#xff1a;此分支可以设…

【JS重点17】原型链(面试重点)

一&#xff1a;原型链底层原理 以下面一段代码为例&#xff0c;基于原型对象&#xff08;Star构造函数的原型对象&#xff09;的继承使得不同构造函数的原型对象关联在一起&#xff08;此处是最大的构造函数Object原型对象&#xff09;&#xff0c;并且这种关联的关系是一种链…

C#联合Halcon机器视觉框架源码—升级版

相较于之前的NxtVision&#xff0c;本软件代码架构更加合理&#xff0c;且新增ui设计器、原来的vb脚本改为C#脚本&#xff0c;并尝试将视觉与运动控制相结合&#xff0c;是一体化的框架。 对源码有需求的&#xff0c;订阅本专栏后&#xff0c;私信我领取。

活动集锦 | 英码科技积极参与行业盛会,AI赋能城市数字化转型

在当今数字经济时代&#xff0c;城市全域数字化转型已经成为提升城市管理效能、优化资源配置、推动经济发展的重要手段。英码科技始终致力于为企业打造高效、低成本的行业应用方案&#xff0c;助力企业实现数字化转型。近日&#xff0c;英码科技受邀参加了多场行业展示活动&…

华为OD刷题C卷 - 每日刷题 23(提取字符串中的最长表达式,模拟目录管理功能 - 完整实现)

1、提取字符串中的最长表达式 目标是从一个给定的字符串中提取出最长的合法简单数学表达式&#xff0c;并计算该表达式的值。如果存在多个同样长度的合法表达式&#xff0c;则选择第一个出现的表达式进行计算。 简单数学表达式的规则&#xff1a; 只包含0-9的数字和、-、*三种…

操作系统复习-线程同步

互斥量 两个线程的指令交叉执行互斥量可以保证先后执行称为原子性 原子性是指一系列操作不可被中断的特性这一系列操作要么全部执行完成&#xff0c;要么全部没有执行不存在部分执行部分未执行的情况 互斥锁 互斥量是最简单的线程同步的方法互斥锁&#xff0c;处于两态之一的…

01 飞行器设计 —— 一门独立的学科

01 飞行器设计 —— 一门独立的学科 01 引言02 飞机设计概述2-1 什么是飞机设计&#xff1f;2-1 飞机设计是从哪里开始的&#xff1f;2-2 如何成为一名飞机设计师&#xff1f;2-4 本书的组织 参考文献 说明&#xff1a;关于Raymer的《Aircraft Design》的读书笔记&#xff1b; …

解读ROS功能包模块的步骤

系列文章目录 提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加 TODO:写完再整理 文章目录 系列文章目录前言解读ROS功能包模块的步骤前言 认知有限,望大家多多包涵,有什么问题也希望能够与大家多交流,共同成长! 推荐开发经验及方法博客专栏: [https:/…

哇塞,超好吃的麻辣片,一口就爱上

最近&#xff0c;我发现了一款让人欲罢不能的美食——食家巷麻辣片&#xff01;&#x1f60d; 一打开包装&#xff0c;那浓郁的麻辣香气就扑鼻而来&#xff0c;瞬间刺激着我的嗅觉神经。&#x1f603;食家巷麻辣片的外观色泽鲜艳&#xff0c;红通通的一片&#xff0c;看着就特…

扩展动态数据统计

以下是三种主要的方式来实现您的需求&#xff0c;分别使用原生的HTML/JavaScript、Vue.js框架和React框架。 1. 使用原生HTML/JavaScript 添加复杂度类型选择 <div class"complexity-type-select"><label>选择复杂度类型&#xff1a;</label>&l…