欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

顺序表的基本操作

程序员文章站 2024-03-20 14:20:28
...
#include "stdio.h"
#include "stdlib.h"
#define OK 1
#define ERROR 0
#define TRUE 1
#define FALSE 0
#define OVERFLOW -2
#define LIST_INIT_SIZE 100
#define LISTINCREMENT 10
typedef int Status;
typedef int ElemType;
typedef struct
{
	ElemType *elem;
	int length;
	int listsize;
}SqList;
/*
顺序表的初始化
*/
Status InitSqList(SqList *L)
{
	//分配连续存储空间,初始大小为LIST_INIT_SIZE
	L->elem = (ElemType *)malloc(LIST_INIT_SIZE * sizeof(ElemType));
	if(!L->elem) 
		exit(OVERFLOW);
	//初始为顺序表为空表,长度为零
	L->length = 0;
	L->listsize = LIST_INIT_SIZE;
	return OK;
}
/*
顺序表的销毁
*/

Status DestroyList(SqList *L)
{
	//释放动态分配的连续空间
	free(L->elem);
	L->elem = NULL;
	L->length = 0;
	L->listsize = 0;
	return OK;
}
/*
清空顺序表,即长度置为零
*/

Status ClearList(SqList *L)
{
	L->length = 0;
	return OK;
}
/*
返回顺序表的元素个数
*/

int ListLength(SqList L)
{
	if(L==NULL){
		return ERROR;
	}
	return L.length;
}
/*
判定顺序表是否为空
*/
Status ListEmpty(SqList L)
{
	if(L.length == 0)
		return TRUE;
	else
		return FALSE;
}
/*
取顺序表中第I个元素,并用e带回
*/
Status GetElem(SqList L,int i,ElemType *e)
{
	if(i<1 || i>L.length)
		return ERROR;
	*e = L.elem[i-1];
	return OK;
}

/*
在顺序表中第I个位置插入元素e
*/
Status ListInsert(SqList *L,int i,ElemType e)
{
	ElemType *newbase;
	int j;
	//参数i不合法
	if(i<1 || i>L->length+1)
		return ERROR;
	//若空间已满,则重新分配空间,增加一个分配增量LISTINCREMENT
	if(L->length >= L->listsize)
	{
		newbase = (ElemType *)realloc(L->elem,(L->listsize+LISTINCREMENT) * sizeof(ElemType));
		if(!newbase)
			exit(OVERFLOW);
		L->elem = newbase;
		L->listsize += LISTINCREMENT;
	}

	//元素后移
	for(j=L->length;j>=i;j--)
		L->elem[j] = L->elem[j-1];

	//插入元素e,并且长度加1
	L->elem[i-1] = e;
	L->length ++;
	return OK;
}

/*
删除顺序表中第I个元素,并用e带回
*/
Status ListDelete(SqList *L,int i,ElemType *e)
{
	int j;
	//参数i不合法
	if(i<1 || i>L->length)
		return ERROR;

	//带回被删除元素值
	*e = L->elem[i-1];

	//元素前移
	for(j=i;j<L->length;j++)
		L->elem[j-1] = L->elem[j];

	//顺序表长度减1
	L->length --;
	return OK;	
}
/*
输出顺序表每个元素
*/
void ListPrint(SqList L)
{
	int i;
	for(i=0;i<L.length;i++)
		printf("%d ",L.elem[i]);
}
相关标签: 数据结构