第四周 项目三-单链表的应用(三)

/*    
 *Copyright(c) 2016, 烟台大学计算机学院    
 *All rights reserved.    
 *文件名称:单链表应用(3).cpp    
 *作    者:李良涵    
 *完成日期:2016年 9月 29日    
    
 *问题描述:已知L1和L2分别指向两个单链表的头结点,且已知其长度分别为m、n, 
            请设计算法将L2连接到L1的后面。实现这个算法,完成测试,并分析这个算法的复杂度。  
 *输入描述:此程序没有输入。   
 *程序输出:输出调整后的结果。   
*/     

#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;   
    }   
}   
 
 
 
 
 
   
 
 
 
 
#include <stdio.h>   
#include <malloc.h>   
#include "linklist.h"   
   
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;   
}   
   
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;   
}   
     

 运行结果

 

Python网络爬虫与推荐算法新闻推荐平台:网络爬虫:通过Python实现新浪新闻的爬取,可爬取新闻页面上的标题、文本、图片、视频链接(保留排版) 推荐算法:权重衰减+标签推荐+区域推荐+热点推荐.zip项目工程资源经过严格测试可直接运行成功且功能正常的情况才上传,可轻松复刻,拿到资料包后可轻松复现出一样的项目,本人系统开发经验充足(全领域),有任何使用问题欢迎随时与我联系,我会及时为您解惑,提供帮助。 【资源内容】:包含完整源码+工程文件+说明(如有)等。答辩评审平均分达到96分,放心下载使用!可轻松复现,设计报告也可借鉴此项目,该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的。 【提供帮助】:有任何使用问题欢迎随时与我联系,我会及时解答解惑,提供帮助 【附带帮助】:若还需要相关开发工具、学习资料等,我会提供帮助,提供资料,鼓励学习进步 【项目价值】:可用在相关项目设计,皆可应用项目、毕业设计、课程设计、期末/期/大作业、工程实训、大创等学科竞赛比赛、初期项目立项、学习/练手等方面,可借鉴此优质项目实现复刻,设计报告也可借鉴此项目,也可基于此项目来扩展开发出更多功能 下载后请首先打开README文件(如有),项目工程可直接复现复刻,如果基础还行,也可在此程序基础上进行修改,以实现其它功能。供开源学习/技术交流/学习参考,勿用于商业用途。质量优质,放心下载使用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值