转载请联系作者,获得授权后方可转载!
main.c
#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
#include "seclist.h"
int main()
{
int i;
pseclist plist;
plist = (pseclist)malloc(sizeof(struct seclist));
plist->capacity = 20;
plist->element = (DATATYPE*)malloc(sizeof(DATATYPE)*plist->capacity);
plist->n = 0;
for(i = 0;i < 10;i++ )
{
plist->element[i]=i;
plist->n++;
}
print_seclist(plist);
judge_seclist(plist);
print_seclist(disorder_seclist(plist));
judge_seclist(plist);
return 0;
}
seclist.c
#include <time.h>
#include "seclist.h"
pseclist disorder_seclist(pseclist plist) //利用随机数删除线性表的一个值再将这个值插到队尾
{
int i,p,tmp;
srand((unsigned)time(0)); //随机数种子
for(i=0;i<plist->n;i++)
{
p = rand()%(plist->n-1); //随机数
tmp = plist->element[p]; //保存的将删除的数
delete_seclist(plist,p); //删除
insert_end(plist,tmp); //尾插
}
return plist;
}
//=======================================
int is_Ascend_Secquence(pseclist plist)
{
int i,ascend = 0,descend = 0; //升序 降序标记 初始化为0
for(i = 0;i <plist->n-1;i++)
{
if(plist->element[i]>=plist->element[i+1])
descend++;
if(plist->element[i]<=plist->element[i+1])
ascend++;
}
if(ascend == plist->n-1 || descend == plist->n-1 )
return 1;
return 0;
}
//========================================
void print_seclist(pseclist plist)
{
int i;
for(i = 0;i < plist->n ;i++ )
printf("%d\t",plist->element[i]);
}
//========================================
void insert_end(pseclist plist,int x)
{
int n;
n = plist->n;
plist->n++;
plist->element[plist->n-1] = x;
}
//========================================
void delete_seclist(pseclist plist,int p)
{
int i;
for(i = p;i < plist->n-1;i++ )
plist->element[i] = plist->element[i+1];
plist->n--;
}
//========================================
void judge_seclist(pseclist plist)
{
if(is_Ascend_Secquence(plist))
printf("该线性表为有序表\n");
else
printf("该线性表不为有序表\n");
}
seclist.h
#ifndef _SECLIST_H_
#define _SECLIST_H_
typedef int DATATYPE;
struct seclist
{
DATATYPE* element;
int capacity;
int n;
};
typedef struct seclist* pseclist;
pseclist disorder_seclist(pseclist plist); //置乱
int is_Ascend_Secquence(pseclist plist); //测序
void print_seclist(pseclist plist); //遍历打印
void insert_end(pseclist plist,int x); //尾插
void delete_seclist(pseclist plist,int p); //删除
void judge_seclist(pseclist plist); //判断
#endif // _SECLIST_H_