初始化,插入,求长度,判断是否为空,获取元素,遍历,定位删除,定位,clear,destroy,插入排序
SequenceList.c
#include "SequenceList.h"
#include<stdlib.h>
int SequenceInit(SeList *l)
{
if(NULL == l)
{
return FAILURE;
}
l->length = 0;
l->data = (ElemType *)malloc(sizeof(ElemType)*SIZE);
if(NULL == l->data)
{
return FAILURE;
}
return SUCCESS;
}
int SequenceInsert(SeList *l,int p, ElemType e)
{
int i;
if(NULL == l || NULL == l->data)
{
return FAILURE;
}
if(p > l->length + 1 || l->length >= SIZE || p < 1)
{
return FAILURE;
}
for(i = 0;i < l->length - p + 1;i++)
{
l->data[l->length - i] = l->data[l->length - i - 1];
}
l->data[p - 1] = e;
l->length++;
return SUCCESS;
}
int SequenceLength(SeList l)
{
return l.length;
}
int SequenceEmpty(SeList l)
{
return (l.length == 0) ? TRUE : FALSE;
}
int GetElem(SeList l,int p, ElemType *e)
{
if(p < 1||p >l.length)
{
return FAILURE;
}
*e = l.data[p - 1];
return SUCCESS;
}
int SequenceTraverse(SeList l,void (*p)(ElemType))
{
if(p == NULL)
{
return FAILURE;
}
int i;
for(i = 0;i < l.length;i++)
{
p(l.data[i]);
}
return SUCCESS;
}
int LocateElem(SeList l,ElemType e, int (*p)(ElemType,ElemType))
{
int i;
for(i = 0;i < l.length;i++)
{
//if(e == l.data[i])
if(p(e,l.data[i]) == TRUE)
{
return i + 1;
}
}
return FAILURE;
}
int SequenceDelete(SeList *l, int p, ElemType *e)
{
if(NULL == l)
{
return FAILURE;
}
if(p < 1 || p > l->length)
{
return FAILURE;
}
int i;
for(i = 0;i < l->length - p;i++)
{
l->data[p - 1 + i] = l ->data[p + i];
}
l->length--;
return SUCCESS;
}
int SequenceClear(SeList *l)
{
if(l == NULL)
{
return FAILURE;
}
l->length = 0;
return SUCCESS;
}
int SequenceDestroy(SeList *l)
{
if(l == NULL)
{
return FAILURE;
}
l->length = 0;
free(l->data);
l->data = NULL;
return SUCCESS;
}
int SequenceInsertsort(SeList *l,int p, ElemType e) //插入排序
{
int i;
if(NULL == l || NULL == l->data)
{
return FAILURE;
}
if(p > l->length + 1 || l->length >= SIZE || p < 1)
{
return FAILURE;
}
ElemType tmp;
l->data[p - 1] = e;
l->length++;
for(i = 0;i < l-> length;i++)
{
if(l->data[p - 1] < l->data[i]) //每插一个就进行比较排序,
{
tmp = l->data[p - 1];
l->data[p - 1] = l->data[i];
l->data[i] = tmp;
}
}
}
SequenceList.h
#ifndef _SEQUENCELIST_H
#define _SEQUENCELIST_H
#define SIZE 10
#define SUCCESS 10000
#define FAILURE 10001
#define TRUE 10002
#define FALSE 10003
typedef int ElemType;
struct SequenceList
{
int length;
ElemType *data;
};
typedef struct SequenceList SeList;
int SequenceInit(SeList *l);
int SequenceInsert(SeList *l,int p, ElemType e);
int SequenceLength(SeList l);
int SequenceEmpty(SeList l);
int GetElem(SeList l,int p, ElemType *e);
int SequenceTraverse(SeList l,void (*p)(ElemType));
int LocateElem(SeList l,ElemType e, int (*p)(ElemType,ElemType));
int SequenceDelete(SeList *l, int p, ElemType *e);
int SequenceClear(SeList *l);
int SequenceDestroy(SeList *l);
int SequenceInsertsort(SeList *l,int p, ElemType e);
#endif
TestSequenceList.c
#include<stdio.h>
#include"SequenceList.h"
void print(ElemType e)
{
printf("%d ",e);
}
int Equal(ElemType e1,ElemType e2)
{
return (e1 == e2) ? TRUE : FALSE;
}
int main()
{
srand(time(NULL));
int ret;
SeList list;
ret = SequenceInit(&list);
if(ret == SUCCESS)
{
printf("Init Success!\n");
}
else
{
printf("Init Failure!\n");
}
int i;
for(i = 0;i < 10;i ++)
{
ret = SequenceInsert(&list, i + 1,rand() % 10);
if(FAILURE == ret)
{
printf("Insert Failure!\n");
}
else
{
printf("Insert Success!\n");
}
}
ret = SequenceLength(list);
printf("length is %d\n",ret);
ret = SequenceEmpty(list);
if(ret == TRUE)
{
printf("is empty\n");
}
else
{
printf("not empty\n");
}
int p = 3;
ElemType e;
ret = GetElem(list,p,&e);
if(FAILURE == ret)
{
printf("Get Element Failure!\n");
}
else
{
printf("%dth element is %d\n",p,e);
}
ret = SequenceTraverse(list,print);
if(ret == FAILURE)
{
printf("Traverse Failure!\n");
}
else
{
printf("Traverse Success!\n");
}
e = 3;
ret = LocateElem(list, e, Equal);
if(ret == FAILURE)
{
printf("%d not exist!\n",e);
}
else
{
printf("%d is %dth element!\n",e,ret);
}
p = 3;
ret = SequenceDelete(&list, p, &e);
if(SUCCESS == ret)
{
printf("Delete %d Success!\n",e);
}
else
{
printf("Delete Failure!\n");
}
ret = SequenceTraverse(list,print);
if(ret == FAILURE)
{
printf("Traverse Failure!\n");
}
else
{
printf("Traverse Success!\n");
}
ret = SequenceClear(&list);
if(SUCCESS == ret)
{
printf("Clear Success!\n");
}
else
{
printf("Clear Failure!\n");
}
ret = SequenceDestroy(&list);
if(SUCCESS == ret)
{
printf("Destroy Success!\n");
}
else
{
printf("Destroy Failure!\n");
}
return 0;
}