第四周--单链表应用(判断是否递增)

第四周 项目3(3)-判断单链表是否递增 问题及代码: /*Copyright(c)2016,烟台大学计算机与控制工程学院 *All right reserved. *文件名称:yyy.cpp *作者:车佳颖 *完成日期;2016年9月22日 *版本号;v1.0 * *问题描述:  设计一个算法,判断单链表L是否是递增的。实现这个算法,并完成测试。 *输入描述:待测试数字 *程序输出:测试结果 阅读详情
/*  
 *Copyright (c) 2015 烟台大学计算机与控制工程学院  
 *All right reserved.  
 *标题:数据结构实践——单链表的应用 
 *作者:杨珺  
 *date:2015年9月22日  
 *版本:V1.0.1  
 *操作系统:XP  
 *运行环境:VC6.0  
 *问题描述:设计一个算法,判断单链表L是否是递增的。
           实现这个算法,并完成测试。 
*/  
头文件:  

#ifndef LINKLIST_H_INCLUDED
#define LINKLIST_H_INCLUDED

typedef int ElemType;
typedef struct LNode        //定义单链表结点类型
{
    ElemType data;
    struct LNode *next;     //指向后继结点
}LinkList;
void CreateListF(LinkList *&L,ElemType a[],int n);//头插法建立单链表
void CreateListR(LinkList *&L,ElemType a[],int n);//尾插法建立单链表
void InitList(LinkList *&L);  //初始化线性表
void DestroyList(LinkList *&L);  //销毁线性表
bool ListEmpty(LinkList *L);  //判断线性表是否为空
int ListLength(LinkList *L);  //求线性表长度
void DispList(LinkList *L);  //输出线性表
bool GetElem(LinkList *L,int i,ElemType &e);  //求线性表某个数据元素值
int LocateElem(LinkList *L,ElemType e);  //按元素值查找
bool ListInsert(LinkList *&L,int i,ElemType e);  //插入数据元素
bool ListDelete(LinkList *&L,int i,ElemType &e);  //删除数据元素
bool increase(LinkList *L);
#endif // LINKLIST_H_INCLUDED

源代码:

#include <stdio.h>
#include <malloc.h>
#include "linklist.h"


void CreateListF(LinkList *&L,ElemType a[],int n)//头插法建立单链表
{
    LinkList *s;
    int i;
    L=(LinkList *)malloc(sizeof(LinkList));     //创建头结点
    L->next=NULL;
    for (i=0; i<n; i++)
    {
        s=(LinkList *)malloc(sizeof(LinkList));//创建新结点
        s->data=a[i];
        s->next=L->next;            //将*s插在原开始结点之前,头结点之后
        L->next=s;
    }
}

void CreateListR(LinkList *&L,ElemType a[],int n)//尾插法建立单链表
{
    LinkList *s,*r;
    int i;
    L=(LinkList *)malloc(sizeof(LinkList));     //创建头结点
    L->next=NULL;
    r=L;                    //r始终指向终端结点,开始时指向头结点
    for (i=0; i<n; i++)
    {
        s=(LinkList *)malloc(sizeof(LinkList));//创建新结点
        s->data=a[i];
        r->next=s;          //将*s插入*r之后
        r=s;
    }
    r->next=NULL;           //终端结点next域置为NULL
}

void InitList(LinkList *&L)
{
    L=(LinkList *)malloc(sizeof(LinkList));     //创建头结点
    L->next=NULL;
}
void DestroyList(LinkList *&L)
{
    LinkList *p=L,*q=p->next;
    while (q!=NULL)
    {
        free(p);
        p=q;
        q=p->next;
    }
    free(p);    //此时q为NULL,p指向尾结点,释放它
}
bool ListEmpty(LinkList *L)
{
    return(L->next==NULL);
}
int ListLength(LinkList *L)
{
    LinkList *p=L;
    int i=0;
    while (p->next!=NULL)
    {
        i++;
        p=p->next;
    }
    return(i);
}
void DispList(LinkList *L)
{
    LinkList *p=L->next;
    while (p!=NULL)
    {
        printf("%d ",p->data);
        p=p->next;
    }
    printf("\n");
}
bool GetElem(LinkList *L,int i,ElemType &e)
{
    int j=0;
    LinkList *p=L;
    while (j<i && p!=NULL)
    {
        j++;
        p=p->next;
    }
    if (p==NULL)            //不存在第i个数据结点
        return false;
    else                    //存在第i个数据结点
    {
        e=p->data;
        return true;
    }
}
int LocateElem(LinkList *L,ElemType e)
{
    LinkList *p=L->next;
    int n=1;
    while (p!=NULL && p->data!=e)
    {
        p=p->next;
        n++;
    }
    if (p==NULL)
        return(0);
    else
        return(n);
}
bool ListInsert(LinkList *&L,int i,ElemType e)
{
    int j=0;
    LinkList *p=L,*s;
    while (j<i-1 && p!=NULL) //查找第i-1个结点
    {
        j++;
        p=p->next;
    }
    if (p==NULL)    //未找到位序为i-1的结点
        return false;
    else            //找到位序为i-1的结点*p
    {
        s=(LinkList *)malloc(sizeof(LinkList));//创建新结点*s
        s->data=e;
        s->next=p->next;                        //将*s插入到*p之后
        p->next=s;
        return true;
    }
}
bool ListDelete(LinkList *&L,int i,ElemType &e)
{
    int j=0;
    LinkList *p=L,*q;
    while (j<i-1 && p!=NULL)    //查找第i-1个结点
    {
        j++;
        p=p->next;
    }
    if (p==NULL)                //未找到位序为i-1的结点
        return false;
    else                        //找到位序为i-1的结点*p
    {
        q=p->next;              //q指向要删除的结点
        if (q==NULL)
            return false;           //若不存在第i个结点,返回false
        e=q->data;
        p->next=q->next;        //从单链表中删除*q结点
        free(q);                //释放*q结点
        return true;
    }
}
bool increase(LinkList *L)
{
    LinkList *p = L->next, *q;  //p指向第1个数据节点
    if(p != NULL)
    {
        while(p->next != NULL)
        {
            q = p->next;   //q是p的后继
            if (q->data > p->data)   //只要是递增的,就继续考察其后继
                p = q;
            else
                return false;    //只要有一个不是后继大于前驱,便不是递增
        }
    }
    return true;
}

测试函数:

#include <stdio.h>
#include <malloc.h>
#include "linklist.h"

int main()
{
    LinkList *A, *B;
    int i;
    ElemType a[]= {1, 3, 2, 9};
    ElemType b[]= {0, 4, 5 ,6, 7, 8};
    InitList(A);
    for(i=3; i>=0; i--)
        ListInsert(A, 1, a[i]);
    InitList(B);
    for(i=5; i>=0; i--)
        ListInsert(B, 1, b[i]);
    printf("A: %c\n", increase(A)?'Y':'N');
    printf("B: %c\n", increase(B)?'Y':'N');
    DestroyList(A);
    DestroyList(B);
    return 0;
}


运行结果:


知识点总结:

        p指向第1个数据节点,定义q指向p后面的节点,比较p和q的大小,如果q>p,q和p继续向后走比较,如果q<p,就不是递增数列。

第四周项目三C/C++单链表应用,逆置、连接与递增判断 /* *Copyright (c) 2017,烟台大学计算机与控制工程学院 *All rights reserved. *文件名称:单链表应用逆置、连接与递增判断 *作 者:高晶 *完成日期:2017年9月26日 *版 本 号:v1.0 * 定义单链表存储结构,用头插法和尾插法建立单链表,并显示建立好以后的结果。 */ 1、设计一个算法,将 阅读详情

相关推荐

Miniconda3迁移(附图详细过程)

服务器上目录占满,想要将conda迁移到其他目录下的操作方法,详细教程。

2301_77554343的博客 6942

单链表-判断单链表L是否是递增的(双指针法)

单链表的存储结构: typedef struct LinkList{ int data; LinkList * next; } 分析: 定义一个指针p够不够用? 你要判断是否递增,说明要比较前后两节点的数据域。 如果前者一直大于后者,那么可判断该单链表递增。 所以这里要定义两个指针,pre ,p. 思路: 1.定义两个前后指针pre ,p,并pre开始指向头结点 2.通过while判断,条件为p != null 如果pre->data > p->data ,说明为正序,则继续比较下

muyu_muyu的博客 4889

基于YOLO11的垃圾分类AI模型训练实战

通过这次实战,我们成功训练出了一个高性能的垃圾分类AI模型。项目展示了从数据准备、模型训练到结果分析的完整流程,为AI在环保领域的应用提供了有价值的参考。项目文件结构│ ├── best.pt # 最佳模型权重│ └── last.pt # 最新模型权重├── results.csv # 详细训练数据├── results.png # 训练曲线图├── confusion_matrix.png # 混淆矩阵└── args.yaml # 训练参数配置。

lydz1的博客 1657

链表-判断是否为递增单链表

判断是否为递增单链表 给定一个单链表判断其是否为递增单链表 int JudgeUpper(LinkList L){ if(L->next==null) return 1; LNode *p=L->next; LNode *q=p->next; while(q){ if(p->data>q->data)//若逆序则返回错误 return 0; } return 1; } -不知道在c语言中如何创建单链表,是的我学傻了,就不能进行测试,哪位大

weixin_42299851的博客 1906

《计算机网络》课程大作业- 《小区局域网的设计和规划》

8.1首先,在满足用户需求方面,通过详细的需求分析,充分考虑了居民和物业管理的不同业务需求。对于居民,无论是日常的高清视频播放、在线游戏、远程办公还是智能家居设备的连接,网络都能提供稳定的高速带宽支持。从有线网络的千兆以太网技术保障稳定的有线连接,到无线网络采用 Wi - Fi 6 技术确保无线覆盖区域的高速和低延迟,满足了居民多样化的娱乐和生活需求。对于物业管理,安防监控系统的实时数据传输、物业办公自动化系统的流畅运行以及社区信息的及时发布等业务,都有针对性的网络设计。

lisangsimida的博客 2598

DiffusionDrive实战:如何用截断扩散模型3个月搞定自动驾驶轨迹规划(附代码)

本文详细介绍了如何利用DiffusionDrive截断扩散模型,在三个月内快速构建端到端的自动驾驶轨迹预测系统。内容涵盖从环境搭建、数据处理、模型架构解析到训练调参和推理优化的完整实战流程,并提供了关键代码示例,旨在帮助开发者高效实现高质量的自动驾驶轨迹规划。

weixin_35578748的博客 144

判断该单链表是否递增有序

给定一个非空单链表,其数据元素为整数,本题要求实现一个函数, 可判断该单链表是否递增有序。若是,输出“YES”,否则,输出“NO”。 输入样例: 5 1 2 3 4 5 输出样例: YES #include <iostream> using namespace std; #define OK 1 #define ERROR 0 #define OVERFLOW -2 #define MAXSIZE 100 typedef int Status; typedef int Ele..

qq_62175345的博客 2917

基于CNN对抗嵌入的图像隐写——CNN-Based Adversarial Embedding for Image Steganography

CNN-Based Adversarial Embedding for Image Steganography https://ieeexplore.ieee.org/abstract/document/8603808 这篇论文发表在TIFS( IEEE TRANSACTIONS ON INFORMATION FORENSICS AND SECURITY),TIFS是网络与信息安全领域的国际两大顶级期刊之一,中国计算机学会(CCF)推荐的A类期刊,SCI一区TOP期刊,目前影响因子有7多了。 1 概

weixin_48654804的博客 2279

第四周项目三(3)判断链表是否递增

/*  *Copyright(c)2017,烟台大学计算机学院  *All right reserved.  *文件名:main.cpp list.h list.cpp  *作者:盛凯  *完成日期:2017年9月28日  *版本号:v1.0  *  *问题描述:判断链表是否递增  *输入描述:无  *程序输出:递增输出Y,否则输出N  */   #include   

计算机科学与技术 353

C#串口通信从入门到精通(27)——高速通信下解决数据处理慢的问题(20ms以内)

本文介绍如何在高速通信情况下解决串口接收的数据来不及处理的问题,由高级工程师多年经验总结而成,绝对是串口领域的实战经验!

qq_34059233的博客 6807

PCL RANSAC拟合空间圆【2026最新版】

RANSAC三维点云空间3D圆拟合。博客长期更新,本文最新更新时间为:2026年4月13日。代码在PCL1.15.0中测试通过

点云侠的博客 7454

判断单链表是否递增

*Copyright(c++)2015 烟台大学计算机学院 * *文件名称:linklist.cpp /linklist.h/ main.cpp *作者:林志文  *完成日期:2016.10.5 *版本号:v1.0 * *问题描述: 设计一个算法,判断单链表L是否是递增的。实现这个算法,并完成测试 #include #include #include "linklis

qq_32472045的博客 1万+

华为OD机试双机位C卷-恢复数字序列 (Py/Java/C/C++/Js/Go)

华为OD机试双机位C卷 恢复数字序列,提供C语言、Java、C++、Python、Go、JavaScript源码实现,并提供完整思路讲解。华为OD机试 - 恢复数字序列。

qq_45776114的博客 1203

第四周 项目3.3 单链表应用之判断是否递增

/*   *Copyright (c) 2016,烟台大学计算机学院 *All right reserved.   *文件名称:test.cpp   *作者:杨天瑞   *完成日期:2016年9月22日   *版本号:v1.2.3   *   *  问题描述:设计一个算法,判断单链表L是否是递增的。   *程序输入:无。   *程序输

Foreigner_Y的博客 1670

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

第四周项目3 单链表应用(3)判断单链表是否递增

问题及代码: /* copyright (t) 2016,烟台大学计算机学院 *All rights reserved. *文件名称:lvfangzhou.cpp *作者:吕方舟*完成日期:2016年9月29日 *版本号:v1.0 *问题描述:判断单链表L是否递增(注:不考虑输入元素有重复的情况,如输入5个节点,1 2 3 3 5) *输入描述:单链

snow0617的博客 708

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

第四周项目三(3)-判断单链表是否递增

问题及代码: /* copyright (t) 2016,烟台大学计算机学院 *All rights reserved. *文件名称:1.cpp *作者:肖博文 *完成日期:2016年9月22日 *版本号:v1.0 *问题描述:判断单链表L是否递增(注:不考虑输入元素有重复的情况,如输入5个节点,1 2 3 3 5) *输入描述:单链表L长度n 单

xiaoguaishou2333的博客 1812

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

判断单链表中的元素是否递增_第四周项目3(3)-判断单链表是否递增

问题及代码:/*copyright (t) 2016,烟台大学计算机学院*All rights reserved.*文件名称:1.cpp*作者:常锐*完成日期:2016年9月22日*版本号:v1.0*问题描述:判断单链表L是否递增(注:不考虑输入元素有重复的情况,如输入5个节点,1 2 3 3 5)*输入描述:单链表L长度n 单链表L各节点元素*程序输出:判断结果*/linklist.h:type...

weixin_33277564的博客 1259

第四周项目3(3)-判断单链表是否递增

问题及代码: [cpp] view plain copy   /*    copyright (t) 2016,烟台大学计算机学院    *All rights reserved.    *文件名称:1.cpp    *作者:车金阳    *完成日期:2016年10月20日    *版本号:v1.0    *问题描述:判

YangCJ_的博客 1035

第四周项目3—单链表 【3】判断是否递增

copyright (c) 2016,烟台大学计算机学院   All rights reserved.   文件名称:1.cpp   作者:孟令康   完成日期:2016年9月12日   版本号:v1.0   问题描述:设计一个算法,判断单链表L是否是递增的。实现这个算法,并完成测试。        输入描述: 单链表L长度m,单链表L各元素节点。  

mlk5739_csdn的博客 649

第四周上机实践—项目3(3)—判断单链表是否递增

/* *Copyright(c)2015,烟台大学计算机与控制工程学院 *All rights reserved. *文件名称:test.cpp *作者:林莉 *完成日期:2015年9月30日 *版本号:v1.0 *问题描述:设计一个算法,判断单链表L是否是递增的。实现这个算法,并完成测试 *输入描述: *程序输出:

Lin1287的博客 892

第四周项目3--单链表应用之递增判断

/* 烟台大学计算机与控制工程学院 作 者:孙潇 完成日期:2015年10月9日 问题描述:设计一个算法,判断单链表L是否是递增的。实现这个算法,并完成测试。 输入描述:若干数据 。 程序输出:链表合并后的数据。 */ 程序中利用了已经实现的单链表算法 linklis

Serena2580的博客 559

第四周项目3-单链表的应用递增判断

#include #include   typedef int ElemType; typedef struct LNode        //定义单链表结点类型 {     ElemType data;     struct LNode *next;     //指向后继结点 }LinkList; void CreateListF(LinkList *&L,ElemType

Esther1012的博客 480

第四周项目三 单链表应用-单链表递增

问题及代码: /*    *烟台大学计算机与控制工程学院     *作    者:孙丽玮  *完成日期:2016年9月12日 *问题描述:设计一个算法,判断单链表L是否是递增的。实现这个算法,并完成测试。 */ 1、list.h的代码 #ifndef LINKLIST_H_INCLUDED  #define LINKLIST_H_INCLUDED    #include

qq1092394176的博客 457

第四周【项目三-单链表应用(3)单链表的递增】

问题: / 烟台大学计控学院 作 者:边朔 完成日期:2016.9.22 问题描述:设计一个算法,判断单链表L是否是递增的。实现这个算法,并完成测试。 / list.h代码; #include #include typedef int ElemType; typedef struct LNode //定义单链表结点类型 {

bianshuoshuo的博客 340
上一篇: 第四周--单链表应用(两个单链表连接)
下一篇: 第四周--建立双链表算法库
杨珺
博客等级 码龄11年 31粉丝 82原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值