您的位置:首页 > 其它

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

2017-09-21 11:16 525 查看
*Copyright(c)2017,烟台大学计算机与控制工程学院
*All rights reservrd.
*作者:刘文平
*完成时间:2017年9月21日
*版本号:v1.0
*问题描述:判断单链表是否递增
*问题输入:无
*问题输出:见截图
#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;
}
linklist.h
#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);  //删除数据元素

#endif // LINKLIST_H_INCLUDED
知识点总结:
遍历整个链表,通过判断链表的存储的数据来判断链表是否递增。
学习总结:
通过一个if语句,判断前后两个节点的大小,来实现这个项目,感觉非常简便很简洁。


内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  单链表 递增