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

2024-06-16 13:28

本文主要是介绍期末复习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;
}

这篇关于期末复习6--链表头插法(逆序)尾插法(顺序)---输出链表的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1066580

相关文章

从基础到高级详解Python数值格式化输出的完全指南

《从基础到高级详解Python数值格式化输出的完全指南》在数据分析、金融计算和科学报告领域,数值格式化是提升可读性和专业性的关键技术,本文将深入解析Python中数值格式化输出的相关方法,感兴趣的小伙... 目录引言:数值格式化的核心价值一、基础格式化方法1.1 三种核心格式化方式对比1.2 基础格式化示例

python 线程池顺序执行的方法实现

《python线程池顺序执行的方法实现》在Python中,线程池默认是并发执行任务的,但若需要实现任务的顺序执行,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋... 目录方案一:强制单线程(伪顺序执行)方案二:按提交顺序获取结果方案三:任务间依赖控制方案四:队列顺序消

Java集合中的链表与结构详解

《Java集合中的链表与结构详解》链表是一种物理存储结构上非连续的存储结构,数据元素的逻辑顺序的通过链表中的引用链接次序实现,文章对比ArrayList与LinkedList的结构差异,详细讲解了链表... 目录一、链表概念与结构二、当向单链表的实现2.1 准备工作2.2 初始化链表2.3 打印数据、链表长

java -jar example.jar 产生的日志输出到指定文件的方法

《java-jarexample.jar产生的日志输出到指定文件的方法》这篇文章给大家介绍java-jarexample.jar产生的日志输出到指定文件的方法,本文给大家介绍的非常详细,对大家的... 目录怎么让 Java -jar example.jar 产生的日志输出到指定文件一、方法1:使用重定向1、

Spring Boot集成/输出/日志级别控制/持久化开发实践

《SpringBoot集成/输出/日志级别控制/持久化开发实践》SpringBoot默认集成Logback,支持灵活日志级别配置(INFO/DEBUG等),输出包含时间戳、级别、类名等信息,并可通过... 目录一、日志概述1.1、Spring Boot日志简介1.2、日志框架与默认配置1.3、日志的核心作用

Spring Bean初始化及@PostConstruc执行顺序示例详解

《SpringBean初始化及@PostConstruc执行顺序示例详解》本文给大家介绍SpringBean初始化及@PostConstruc执行顺序,本文通过实例代码给大家介绍的非常详细,对大家的... 目录1. Bean初始化执行顺序2. 成员变量初始化顺序2.1 普通Java类(非Spring环境)(

浅析Spring如何控制Bean的加载顺序

《浅析Spring如何控制Bean的加载顺序》在大多数情况下,我们不需要手动控制Bean的加载顺序,因为Spring的IoC容器足够智能,但在某些特殊场景下,这种隐式的依赖关系可能不存在,下面我们就来... 目录核心原则:依赖驱动加载手动控制 Bean 加载顺序的方法方法 1:使用@DependsOn(最直

在Linux中改变echo输出颜色的实现方法

《在Linux中改变echo输出颜色的实现方法》在Linux系统的命令行环境下,为了使输出信息更加清晰、突出,便于用户快速识别和区分不同类型的信息,常常需要改变echo命令的输出颜色,所以本文给大家介... 目python录在linux中改变echo输出颜色的方法技术背景实现步骤使用ANSI转义码使用tpu

C++链表的虚拟头节点实现细节及注意事项

《C++链表的虚拟头节点实现细节及注意事项》虚拟头节点是链表操作中极为实用的设计技巧,它通过在链表真实头部前添加一个特殊节点,有效简化边界条件处理,:本文主要介绍C++链表的虚拟头节点实现细节及注... 目录C++链表虚拟头节点(Dummy Head)一、虚拟头节点的本质与核心作用1. 定义2. 核心价值二

Spring如何使用注解@DependsOn控制Bean加载顺序

《Spring如何使用注解@DependsOn控制Bean加载顺序》:本文主要介绍Spring如何使用注解@DependsOn控制Bean加载顺序,具有很好的参考价值,希望对大家有所帮助,如有错误... 目录1.javascript 前言2. 代码实现总结1. 前言默认情况下,Spring加载Bean的顺