8月3 顺序表代码

 初始化,插入,求长度,判断是否为空,获取元素,遍历,定位删除,定位,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;
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值