线性表的顺序存储结构

线性表的顺序存储结构描述如下:

以下为头文件,对于函数进行声明。

#include 

#define LISTSIZE 100

typedef int ElemType;
typedef struct
{
	ElemType list[LISTSIZE];
	int length;
}Seqlist;

void InitList(Seqlist *L);//初始化操作
int ListEmpty(Seqlist L);//判断线性表为空
int GetElem(Seqlist L,int i,ElemType *e);//用序号获取元素
int LocateElem(Seqlist L,ElemType e);//用内容获取元素
ElemType ModifList(Seqlist *L,int i,ElemType e);//修改数据
int InsertList(Seqlist *L,int i,ElemType e);//插入线性表
int DeleteList(Seqlist *L,int i,ElemType *e);//从线性表中删除
int ListLength(Seqlist L);//返回线性表元素个数
void ClearList(Seqlist *L);//清空线性表


以下为顺序表的基本运算:

对函数进行定义。

#include "顺序表.h"

void InitList(Seqlist *L)//初始化操作
{
	L->length = 0;
}
int ListEmpty(Seqlist L)//判断线性表为空
{
	if(0 == L.length )
	{
		return 1;
	}
	else
	{
		return 0;
	}
}
int GetElem(Seqlist L,int i,ElemType *e)//用序号获取元素
{
	if(i < 1||i > L.length )
	{
		return -1;
	}
	*e = L.list[i-1];
	return 1;
}
int LocateElem(Seqlist L,ElemType e)//用内容获取元素
{
	int i;
	for(i = 1;i < L.length+1 ;i++)
	{
		if(e == L.list[i-1])
		{
			return i;
		}
	}
	return 0;
}
ElemType ModifList(Seqlist *L,int i,ElemType e)
{
	int j;
	for(j = 0;j < L->length ;j++)
	{
		if(i == j)
		{
			L->list[i] = e;
			return L->list[i];
		}
	}
	return 0;
}
int InsertList(Seqlist *L,int i,ElemType e)//插入线性表
{
	int j;
	if(i < 1||i > L->length +1)
	{
		printf("插入位置不合适!\n");
		return -1;
	}
	else if(L->length  >= LISTSIZE)
	{
		printf("顺序表已满,不能插入元素!\n");
		return 0;
	}
	else
	{
		for(j = L->length ;j >= i;j--)
		{
			L->list[j] = L->list[j-1];
		}
		L->list[i-1] = e;
		L->length = L->length +1;
		return 1;
	}
}
int DeleteList(Seqlist *L,int i,ElemType *e)//从线性表中删除
{
	int j;
	if(i < 1||i > L->length)
	{
		printf("删除位置不合适!\n");
		return -1;
	}
	else if( 0 == L->length )
	{
		printf("顺序表已空,不能进行删除!\n");
		return 0;
	}
	else
	{
		*e = L->list[i-1];
		for(j = i;j < L->length ;j++)
		{
			L->list[j-1] = L->list[j];  
		}
		L->length = L->length - 1;
		return 1;
	}
}
int ListLength(Seqlist L)//返回线性表元素个数
{
	return L.length ;
}
void ClearList(Seqlist *L)//清空线性表
{
	L->length = 0;
}



以下为头文件:

对各个函数进行测试。

#include "顺序表.h"

int main(void)
{
	int i,flag;
	ElemType a[] = {6,11,11,23};
	ElemType b[] = {2,10,12,12,21};
	ElemType e;
	Seqlist A,B;
	InitList(&A);
	InitList(&B);
	for(i = 1;i <= sizeof(a)/sizeof(a[0]);i++)
	{
		if( 0 == InsertList(&A,i,a[i-1]))
		{
			printf("位置不合法");
			return 0;
		}
	}
	for(i = 1;i <= sizeof(b)/sizeof(b[0]);i++)
	{
		if( 0 == InsertList(&B,i,b[i-1]))
		{
			printf("位置不合法");
			return 0;
		}
	}
	printf("顺序表A中的元素:\n");
	for(i = 1;i <= A.length ;i++)
	{
		flag = GetElem(A,i,&e);
		if(1 == flag)
		{
			printf("%4d",e);
		}
	}
	printf("\n");
	printf("顺序表B中的元素:\n");
	for(i = 1;i <= B.length ;i++)
	{
		flag = GetElem(B,i,&e);
		if(1 == flag)
		{
			printf("%4d",e);
		}
	}
	printf("\n");
	ModifList(&A,1,5);
	printf("修改后顺序表A中的元素:\n");
	for(i = 1;i <= A.length ;i++)
	{
		flag = GetElem(A,i,&e);
		if(1 == flag)
		{
			printf("%4d",e);
		}
	}
	printf("\n");
	return 0;
}



你可能感兴趣的:(C语言,C语言)