顺序表实现

#ifndef HEAD_H__
#define HEAD_H__
#include<stdlib.h>

#define ERROR 0
#define OK 1
#define FALSE 0
#define TRUE 1
typedef int status;
typedef int boolean;
typedef int ElementType;
#define MAX 100

void view(ElementType *);
status compare(ElementType ,ElementType);
void buildSet(ElementType a[],int length,int beg,int end);
void printSet(ElementType a[],int length);
#endif


#ifndef LIST_H__
#define LIST_H__

#include"head.h"

#define LIST_INIT_SIZE 100
#define LISTINCREMENT 10

typedef struct{
	ElementType *elem;
	int length;
	int listSize;
}sqList;

status initSqList(sqList *L);
status destroySqList(sqList *L);
status clearSqList(sqList *L);
status empty(sqList L);
int length(sqList L);
status getElement(sqList L,int i,ElementType *e);
int locateElement(sqList L,ElementType e,status (*compare)(ElementType ,ElementType));
status priorElement(sqList L,ElementType cur_e,ElementType *pre_e);
status nextElement(sqList L,ElementType cur_e,ElementType *next_e);
status myInsert(sqList *L,int i,ElementType e);
status myDelete(sqList *L,int i,ElementType *e);
status myTraverse(sqList L,void(*view)(ElementType*));

#endif

#include"head.h"
#include<stdio.h>
#include<stdlib.h>
#include<time.h>

void view(ElementType *e)
{
	printf("%d\t",*e);
}

status compare(ElementType e1,ElementType e2)
{
	if(e1==e2)
		return TRUE;
	else
		return FALSE;
}

void buildSet(ElementType a[],int length,int beg,int end)
{
	int i;

	srand((unsigned)time(NULL));
	for(i=0;i<length;i++)
		a[i]=rand()%(end-beg+1)+beg;
}

void printSet(ElementType a[],int length)
{
	int i,count=1;
	
	for(i=0;i<length;i++,count++)
	{
		printf("%d\t",a[i]);
		if(count%10==0)
			printf("\n");
	}
}

//#include"head.h"
#include"sqList.h"

status initSqList(sqList *L)
{
	L->elem=(ElementType *)malloc(LIST_INIT_SIZE*sizeof(ElementType));
	if(!L->elem)
		exit(1);
	L->length=0;
	L->listSize=LIST_INIT_SIZE;
	return OK;
}

status destroySqList(sqList *L)
{
	free(L->elem);
	L->elem=NULL;
	L->length=0;
	L->listSize=0;
	return OK;
}

status clearSqList(sqList *L)
{
	L->length=0;
	return OK;
}

status empty(sqList L)
{
	if(L.length==0)
		return TRUE;
	else
		return FALSE;
}

int length(sqList L)
{
	return L.length;
}

status getElement(sqList L,int i,ElementType *e)
{
	if(i<0 || i>=L.length)
		exit(1);
	*e=*(L.elem+i);
	return OK;
}

int locateElement(sqList L,ElementType e,status (*compare)(ElementType ,ElementType))
{
	ElementType *p=L.elem;
	int i;

	for(i=0;i<L.length && !compare(*p,e);i++,p++)
		;
	if(i<L.length)
		return i;
	else
		return -1;
}

status priorElement(sqList L,ElementType cur_e,ElementType *pre_e)
{
	ElementType *p=L.elem+1;
	int i;

	for(i=1;i<L.length && *p!=cur_e;i++,p++)
		;
	if(i<L.length)
	{
		*pre_e=*--p;
		return OK;
	}
	else
		return FALSE;
}

status nextElement(sqList L,ElementType cur_e,ElementType *next_e)
{
	ElementType *p=L.elem;
	int i;

	for(i=0;i<L.length-1 && *p!=cur_e;p++,i++)
		;
	if(i<L.length-1)
	{
		*next_e=*++p;
		return OK;
	}
	else
		return FALSE;
}

status myInsert(sqList *L,int i,ElementType e)
{
	ElementType *base,*q,*p;

	if(i<0 || i>L->length)
		return ERROR;
	if(L->length>=L->listSize)
	{
		base=(ElementType *)realloc(L->elem,(L->listSize+LISTINCREMENT)*sizeof(ElementType));
		if(!base)
			exit(1);
		L->elem=base;
		L->listSize+=LISTINCREMENT;
	}
	q=L->elem+i;
	for(p=L->elem+L->length-1;p>=q;--p)
		*(p+1)=*p;
	*q=e;
	++L->length;
	return OK;
}

status myDelete(sqList *L,int i,ElementType *e)
{
	ElementType *p,*q;

	if(i<0 || i>=L->length)
		return ERROR;
	p=L->elem+i;
	*e=*p;
	q=L->elem+L->length-1;
	for(++p;p<=q;p++)
		*(p-1)=*p;
	L->length--;
	return OK;
}

status myTraverse(sqList L,void(*view)(ElementType*))
{
	ElementType *p;
	int i;
	p=L.elem;
	for(i=0;i<L.length;i++)
		view(p++);
	return OK;
}

#include<stdio.h>
#include"head.h"
#include"sqList.h"
/*

status initSqList(sqList *L);
status destroySqList(sqList *L);
status clearSqList(sqList *L);
status empty(sqList L);
int length(sqList L);
status getElement(sqList L,int i,ElementType *e);
int locateElement(sqList L,ElementType e,status (*compare)(ElementType ,ElementType));
status priorElement(sqList L,ElementType cur_e,ElementType *pre_e);
status nextElement(sqList L,ElementType cur_e,ElementType *next_e);
status myInsert(sqList *L,int i,ElementType e);
status myDelete(sqList *L,int i,ElementType *e);
status myTraverse(sqList L,void(*view)(ElementType*));

*/
int main()
{
	int i;
	ElementType a[MAX],next_e,pre_e,e,index;
	sqList L;

	if(initSqList(&L))
		printf("build a sqList : L\n");
	printf("the sqList length is %d\n",L.length);
	printf("the sqList listSize is %d\n",L.listSize);
	printf("the address of sqList is %xd\n",L.elem);

	if(empty(L))
		printf("the sqList is empty\n");

	buildSet(a,MAX,0,100);
	//printSet(a,MAX);
	for(i=0;i<MAX;i++)
		myInsert(&L,L.length,a[i]);
	myTraverse(L,view);

	if(nextElement(L,a[1],&next_e))
		printf("the next element of %d is : %d\n",a[1],next_e);
	if(priorElement(L,a[1],&pre_e))
		printf("the previous element of %d is : %d\n",a[1],pre_e);

	for(i=0;i<10;i++)
	{
		myDelete(&L,0,&e);
		printf("%d\t",e);
	}
	printf("the new sqList is : \n");
	myTraverse(L,view);

	printf("the getElement is :\n");
	for(i=0;i<20;i++)
	{
		getElement(L,20-i-1,&e);
		printf("%d\t",e);
	}

	printf("locate element :\n");
	if((index=locateElement(L,55,compare))!=-1)
		printf("the element 55's index is :%d and the value is %d\n",index,*(L.elem+index));

	printf("clear the sqList\n");
	clearSqList(&L);
	printf("the length of the sqList is: %d\n",L.length);
	printf("destroy the sqList\n");
	destroySqList(&L);
	printf("the sqList's address is : %x",L.elem);
	return 0;
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值