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

来源:互联网 发布:施耐德和公牛 知乎 编辑:程序博客网 时间:2024/04/27 19:51

问题及代码:

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

  #include <stdio.h>  #include <malloc.h>  typedef int ElemType;    typedef struct LNode        //定义单链表结点类型    {        ElemType data;        struct LNode *next;     //指向后继结点    }LinkList;    void InitList(LinkList *&L);  //初始化线性表    void DestroyList(LinkList *&L);  //销毁线性表    bool ListInsert(LinkList *&L,int i,ElemType e);  //插入数据元素  void DispList(LinkList *L);  //输出线性表    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 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;        }    }    void DispList(LinkList *L)      {          LinkList *p=L->next;          while (p!=NULL)          {              printf("%d ",p->data);              p=p->next;          }          printf("\n");      }      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,2,3,4,5};      ElemType b[]= {0,1,4,2,3,9};      InitList(A);      for(i=4; i>=0; i--)          ListInsert(A, 1, a[i]);      printf("链表A:");      DispList(A);      InitList(B);      for(i=5; i>=0; i--)          ListInsert(B, 1, b[i]);          printf("链表B:");      DispList(B);      printf("A: %c\n", increase(A)?'Y':'N');      printf("B: %c\n", increase(B)?'Y':'N');      DestroyList(A);      DestroyList(B);      return 0;  }  

运行结果:


知识点总结:

判断前驱和后继的大小





0 0
原创粉丝点击