数据结构---单链表

  • 题目:构造一个单链表。

  • 使用的软件:VS2022
  • 使用的语言:C语言
  • 使用的项目:test.c 

                             Setlist.h

                             Setlish.c

  • 项目实践: Setlist.h的代码为:
    #pragma once#include<stdio.h>
    #include<stdlib.h>
    #include<assert.h>//定义节点的结构
    //数据 + 指向下一个节点的指针
    typedef int SLTDataType;typedef struct SListNode {SLTDataType data;struct SListNode* next;
    }SLTNode;void SLTPrint(SLTNode* phead);//尾插
    void SLTPushBack(SLTNode** pphead, SLTDataType x);
    //头插
    void SLTPushFront(SLTNode** pphead, SLTDataType x);
    //尾删
    void SLTPopBack(SLTNode** pphead);
    //头删
    void SLTPopFront(SLTNode** pphead);
    

    它和顺序表的头文件基本上差不多,

  • Setlish.c的主文件,则代码为:

    #define  _CRT_SECURE_NO_WARNINGS 1#include"SList.h"
    void SLTPrint(SLTNode* phead)
    {SLTNode* pcur = phead;while (pcur)//pcur != NULL{printf("%d->", pcur->data);pcur = pcur->next;}printf("NULL\n");
    }SLTNode* SLTBuyNode(SLTDataType x)
    {SLTNode* newnode = (SLTNode*)malloc(sizeof(SLTNode));if (newnode == NULL){perror("malloc fail!");exit(1);}newnode->data = x;newnode->next = NULL;return newnode;
    }//尾插
    void SLTPushBack(SLTNode** pphead, SLTDataType x)
    {assert(pphead);//*pphead 就是指向第一个节点的指针//空链表和非空链表SLTNode* newnode = SLTBuyNode(x);if (*pphead == NULL){*pphead = newnode;}else{//找尾SLTNode* ptail = *pphead;while (ptail->next){ptail = ptail->next;}//ptail指向的就是尾结点ptail->next = newnode;}
    }
    //头插
    void SLTPushFront(SLTNode** pphead, SLTDataType x)
    {assert(pphead);SLTNode* newnode = SLTBuyNode(x);//newnode *ppheadnewnode->next = *pphead;*pphead = newnode;
    }
    //尾删
    void SLTPopBack(SLTNode** pphead)
    {//链表不能为空assert(pphead && *pphead);//链表只有一个节点if ((*pphead)->next == NULL) //-> 优先级高于*{free(*pphead);*pphead = NULL;}else {//链表有多个节点SLTNode* prev = *pphead;SLTNode* ptail = *pphead;while (ptail->next){prev = ptail;ptail = ptail->next;}//prev ptailfree(ptail);ptail = NULL;prev->next = NULL;}
    }
    //头删
    void SLTPopFront(SLTNode** pphead);

    这里就直接写完了,不做过多的解释,请看vcr

  • test.c的代码:

    #define  _CRT_SECURE_NO_WARNINGS 1#include"SList.h"void SListTest01()
    {//链表是由一个一个的节点组成//创建几个节点SLTNode* node1 = (SLTNode*)malloc(sizeof(SLTNode));node1->data = 1;SLTNode* node2 = (SLTNode*)malloc(sizeof(SLTNode));node2->data = 2;SLTNode* node3 = (SLTNode*)malloc(sizeof(SLTNode));node3->data = 3;SLTNode* node4 = (SLTNode*)malloc(sizeof(SLTNode));node4->data = 4;//将四个节点连接起来node1->next = node2;node2->next = node3;node3->next = node4;node4->next = NULL;//调用链表的打印SLTNode* plist = node1;SLTPrint(plist);
    }void SListTest02()
    {SLTNode* plist = NULL;SLTPushBack(&plist, 1);SLTPushBack(&plist, 2);SLTPushBack(&plist, 3);SLTPushBack(&plist, 4);SLTPrint(plist);//SLTPushBack(NULL, 5);////测试头插//SLTPushFront(&plist, 6);//SLTPrint(plist);//SLTPushFront(&plist, 7);//SLTPrint(plist);//SLTPushFront(&plist, 8);//SLTPrint(plist);//测试尾删SLTPopBack(&plist);SLTPrint(plist);SLTPopBack(&plist);SLTPrint(plist);SLTPopBack(&plist);SLTPrint(plist);SLTPopBack(&plist);SLTPrint(plist);}int main()
    {//SListTest01();SListTest02();return 0;
    }

    基本上就这么多,如果要解释,就是越解释越乱,请大家仔细观看。

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

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

相关文章

【算法小白周赛2】A.朋友遍天下(easy)C++代码和题解

题目链接&#xff1a;https://www.starrycoding.com/problem/165 题目描述 本题与hard版本有一定区别&#xff0c;仅“拜访时间安排表”的规则相同&#xff0c;hard版本需要进行一定修改才能通过easy版本。 醋酸锌有许多的好友&#xff0c;为了能好好拜访他的每一个好友&…

Java | Leetcode Java题解之第67题二进制求和

题目&#xff1a; 题解&#xff1a; class Solution {public String addBinary(String a, String b) {StringBuffer ans new StringBuffer();int n Math.max(a.length(), b.length()), carry 0;for (int i 0; i < n; i) {carry i < a.length() ? (a.charAt(a.leng…

.离散化.

离散化就是将原本大而稀疏的区间&#xff0c;映射到紧凑连续的区间内。进而压缩区间长度。 题目&#xff1a; 假定有一个无限长的数轴&#xff0c;数轴上每个坐标上的数都是 00。 现在&#xff0c;我们首先进行 n&#x1d45b; 次操作&#xff0c;每次操作将某一位置 x&#…

单调栈|496.下一个更大元素I

力扣题目链接 class Solution { public:vector<int> nextGreaterElement(vector<int>& nums1, vector<int>& nums2) {stack<int> st;vector<int> result(nums1.size(), -1);if (nums1.size() 0) return result;unordered_map<int, …

连接和使用vCenter Server嵌入式vPostgres数据库

vCenter Server 早期支持内嵌(embedded)和外部(external)数据库,内嵌数据库就是vPostgres,基于VMware Postgres数据库(PostgreSQL数据库),外部数据库用的多的是Oracle数据库和SQL Server数据库。因为早期使用内嵌的PostgreSQL数据库只能用于小型环境,比如仅支持几十台…

SpringBoot对接前端传递的base64编码的图片信息,转成图片以Get请求进行浏览器文件下载,不下载到本地。

一、问题描述 1.1需求描述。 前端将浏览器展示的图片以base64编码的形式传递给后端&#xff0c;以此实现文件下载的功能&#xff0c;在浏览器弹出文件下载框。效果如下 1.2实现思路 将前端传递的base64进行解码&#xff0c;设置响应头返回响应体&#xff0c;代码如下。 pu…

opencv 采样照片

def take_photo(path):capture cv2.VideoCapture(0)# 加载人脸特径数据face_detector cv2.CascadeClassifier(haarcascade_frontalface_alt.xml)filename 1flag_write Falsewhile True:flag,frame capture.read()if not flag:breakgray cv2.cvtColor(frame, codecv2.COLOR…

当redis的存储空间满了,会发生什么?

1. 淘汰策略 当Redis的存储空间满了时&#xff0c;它的行为取决于配置的最大内存策略&#xff08;maxmemory-policy&#xff09;。Redis的数据淘汰策略主要围绕两个关键因素展开&#xff1a;键是否设置了过期时间&#xff0c;以及键的使用频率或最近使用情况。这些策略之间的关…

ubuntu22.04 cmake 配置mysql

报错信息&#xff1a; CMake Error at CMakeLists.txt:33 (find_package): By not providing “FindMySQL.cmake” in CMAKE_MODULE_PATH this project has asked CMake to find a package configuration file provided by “MySQL”, but CMake did not find one. Could not…

【02358单片机原理及应用】第三、四、五章考试复习自考复习

第3章 80C51单片机指令系统 考试知识点&#xff1a; 1、寻址方式 &#xff08;1&#xff09;立即寻址&#xff08;#data&#xff0c;#data16&#xff09;例&#xff1a;MOV A&#xff0c;#00H &#xff08;2&#xff09;直接寻址&#xff08;direct&#xff09;内部RAM…

古典密码学简介

目录 C. D. Shannon: 一、置换密码 二、单表代替密码 ① 加法密码 ② 乘法密码 ③密钥词组代替密码 三、多表代替密码 代数密码 四、古典密码的穷举分析 1、单表代替密码分析 五、古典密码的统计分析 1、密钥词组单表代替密码的统计分析 2、英语的统计规…

电商核心技术揭秘四十七:社会化营销中的社区建设

相关系列文章 电商技术揭秘相关系列文章合集&#xff08;1&#xff09; 电商技术揭秘相关系列文章合集&#xff08;2&#xff09; 电商技术揭秘相关系列文章合集&#xff08;3&#xff09; 电商技术揭秘四十一&#xff1a;电商平台的营销系统浅析 电商技术揭秘四十二&#…

【业务场景】京东实际场景,频繁GC引起的CPU飙高问题的解决

目录 1.业务介绍 2.判断任务类型 3.CPU飙高的原因 1.业务介绍 本文的业务场景是京东零售线公开的一篇文章&#xff0c;文章内容详细介绍了京东零售线如何将广告相关的定时任务从半小时优化到秒级的&#xff0c;原文链接&#xff1a; 半小时到秒级&#xff0c;京东零售定时…

登封授牌,花落郑州

近日&#xff0c;“大禹故里故都”授牌仪式在河南省登封市隆重举行&#xff0c;河南省社科院有关单位将匾牌授予登封市。报道称&#xff1a;至此&#xff0c;千百年来备受争议的大禹故里、故都问题&#xff0c;终于尘埃落定&#xff0c;华夏立国始祖大禹终于魂归故里。 略有微词…

QT+串口调试助手+基本版

一、创建串口调试助手UI界面 1、首先生成串口连接必要参数界面&#xff0c;删除关闭串口控件 2、给参数下拉框添加常见的选项&#xff0c;删除关闭串口控件 3、将串口调试助手参数界面布局整齐&#xff0c;删除关闭串口控件 4、更改控件名字&#xff0c;方便后续编程&#xff…

OpenHarmony实战开发-动画曲线、如何实现动画衔接

UI界面除了运行动画之外&#xff0c;还承载着与用户进行实时交互的功能。当用户行为根据意图变化发生改变时&#xff0c;UI界面应做到即时响应。例如用户在应用启动过程中&#xff0c;上滑退出&#xff0c;那么启动动画应该立即过渡到退出动画&#xff0c;而不应该等启动动画完…

SSD能否全面取代HDD?

硬盘制造商希捷希望我们理解关于固态硬盘&#xff08;SSD&#xff09;取代传统硬盘&#xff08;HDD&#xff09;这一神话背后的三个真相&#xff1a;SSD价格不会与旋转磁盘价格相匹配&#xff0c;SSD制造产能无法与HDD产能相匹敌&#xff0c;以及SSD并不适合近线硬盘工作负载。…

特斯拉FSD落地分析

再续前缘 媒体的神经从马斯克的湾流私人飞机起飞那一刻开始,就开始被牵动着。28/4 号的突然访华,在大多数人看来其实已经早已是计划之中,从摆在台面上的消息来看,主要目的是为了在大陆推广FSD的落地,也为8月份FSD 的正式版本做预热,和中国上海的第一次联姻造就了特斯拉m…

孪生网络、匹配网络和原型网络:详解与区分

孪生网络、匹配网络和原型网络 孪生网络、匹配网络和原型网络&#xff1a;详解与区分孪生网络&#xff08;Siamese Networks&#xff09;核心概念工作原理 匹配网络&#xff08;Matching Networks&#xff09;核心概念工作原理 原型网络&#xff08;Prototypical Networks&…

.NET高级面试指南专题二十九【备忘录模式介绍,用于需要撤销操作或在发生错误时恢复对象状态的情况】

备忘录模式是一种行为型设计模式&#xff0c;用于捕获对象的内部状态并在不破坏其封装性的情况下将其保存&#xff0c;以便稍后可以将对象恢复到先前的状态。这种模式通常用于需要撤销操作或在发生错误时恢复对象状态的情况。 原理 备忘录模式包含以下几个关键角色&#xff1a;…