问题及代码:
- /*
- copyright (t) 2016,烟台大学计算机学院
- *All rights reserved.
- *文件名称:1.cpp
- *作者:车金阳
- *完成日期:2016年10月20日
- *版本号:v1.0
- *问题描述:判断单链表L是否递增(注:不考虑输入元素有重复的情况,如输入5个节点,1 2 3 3 5)
- *输入描述:单链表L长度n 单链表L各节点元素
- *程序输出:判断结果
- */
linklist.h:
- typedef int ElemType;
- typedef struct LNode //定义单链表结点类型
- {
- ElemType data;
- struct LNode *next; //指向后继结点
- } LinkList;
- void CreateListR(LinkList *&L,ElemType a[],int n);//尾插法建立单链表
- void DispList(LinkList *L); //输出单链表
- int LinkJudgement(LinkList *L); //判断单链表L是否是递增的
linklist.cpp:
- #include <stdio.h>
- #include <malloc.h>
- #include "linklist.h"
- void CreateListR(LinkList *&L,ElemType a[],int n)//尾插法建立单链表
- {
- LinkList *s,*r; //头指针*s与增加的尾指针*r
- int i;
- L=(LinkList *)malloc(sizeof(LinkList));
- r=L;
- for(i=0;i<n;i++)
- {
- s=(LinkList *)malloc(sizeof(LinkList));
- s->data=a[i];
- r->next=s;
- r=s;
- }
- r->next=NULL; //到尾
- }
- void DispList(LinkList *L) //输出单链表
- {
- LinkList *p=L->next;
- while(p!=NULL)
- {
- printf("%d ",p->data);
- p=p->next;
- }
- printf("\n");
- }
- int LinkJudgement(LinkList *L) //判断单链表L是否是递增的
- {
- LinkList *p=L->next;
- int flag=1;
- while(p->next!=NULL)
- {
- if(p->data<p->next->data)
- p=p->next;
- else
- {
- flag=0;
- break;
- }
- }
- return flag;
- }
main.cpp:
- #include <stdio.h>
- #include <malloc.h>
- #include "linklist.h"
- int main()
- {
- ElemType a[1000];
- LinkList *L;
- int i,n;
- printf("请输入单链表L长度:\n");
- scanf("%d",&n);
- printf("请输入单链表L各节点元素:\n");
- for(i=0;i<n;i++)
- scanf("%d",&a[i]);
- CreateListR(L,a,n);
- printf("单链表L各节点为:\n");
- DispList(L);
- if(LinkJudgement(L))
- printf("该单链表是递增的!\n");
- else
- printf("该单链表不是递增的!\n");
- return 0;
- }