数据结构——C语言实现顺序表各种基本运算的算法

 sqlist.cpp

#include "stdio.h"
#include "malloc.h"
#define MaxSize 50
typedef char ElemType;
typedef struct{
	ElemType data[MaxSize];                //存放顺序表元素
	int length;                            //存放顺序表的长度
} SqList;                                      //声明顺序表的类型

void CreateList(SqList *&L,ElemType a[],int n){    //整体建立顺序表
	L = (SqList *)malloc(sizeof(SqList));
	for(int i=0;i data[i] = a[i];
	L -> length = n;
}

void InitList(SqList *&L){                        //初始化线性表
	L = (SqList *)malloc(sizeof(SqList));     //分配存放线性表的空间
	L -> length = 0;
}

void DestroyList(SqList *&L){                     //销毁线性表
	free(L);
}

bool ListEmpty(SqList *L){                        //判断线性表是否为空表
	return(L -> length == 0);
}

int ListLength(SqList *L){                        //求线性表的长度
	return(L -> length);
}

void DispList(SqList *L){                         //输出线性表
	for(int i=0;i length;i++)
		printf("%c",L -> length);
	printf("\n");
}

bool GetElem(SqList *L,int i,ElemType e){         //求线性表中第i个元素的值
	if(i < 1 || i > L -> length)
		return false;
	e = L -> length;
	return true;
}

int LocateElem(SqList *L,ElemType e){            //查找第一个值域为e的元素的序号
	int i=0;
	while(i length && L -> data[i] != e)
		i++;
	if(i>L -> length)
		return 0;
	else
		return i+1;
}

bool ListInsert(SqList *&L,int i,ElemType e){    //插入第i个元素
	int j;
	if(i < 1 || i > L -> length + 1)
		return false;
	i--;                                     //将顺序表位序转化为data下标
	for(j=L -> length;j>i;j--)               //将data[i]及后面的元素后移一个位置
		L -> data[j] = L -> data[j-1];
	L -> data[i] = e;                        //顺序表长度+1
	L -> length++;
	return true;
}

bool ListDelete(SqList *&L,int i,ElemType &e){   //删除第i个元素
	int j;
	if(i < 1 || i > L -> length)
		return false;
	i--;                                     //将顺序表位序转化为data下标
	e = L ->data[i];
	for(j = i; j < L -> length - 1; j++)     //将data[i]及后面的元素前移一个位置
		L -> data[j] = L -> data[j+1];
	L -> length--;                           //顺序表长度-1
	return true;
}

main.cpp

#include "sqlist.cpp"
int main(){
	SqList *L;
	ElemType e;
	printf("顺序表的基本运算如下:\n");
	printf("  (1)初始化顺序表L\n");
	InitList(L);
	printf("  (2)依次插入 a,b,c,d,e 元素\n");
	ListInsert(L, 1, 'a');
	ListInsert(L, 2, 'b');
	ListInsert(L, 3, 'c');
	ListInsert(L, 4, 'd');
	ListInsert(L, 5, 'e');
	printf("  (3)输出顺序表L:");
	DispList(L);
	printf("  (4)顺序表L长度:%d\n",ListLength(L));
	printf("  (5)顺序表L为%s\n",(ListEmpty(L)?"空":"非空"));
	GetElem(L, 3, e);
	printf("  (6)顺序表L的第3个元素:%c\n",e);
	printf("  (7)元素a的位置:%d\n",LocateElem(L, 'a'));
	printf("  (8)在第4个元素的位置上插入f元素\n");
	ListInsert(L, 4, 'f');
	printf("  (9)输出顺序表L:");
	DispList(L);
	printf("  (10)删除L的第3个元素\n");
	ListDelete(L, 3, e);
	printf("  (11)输出顺序表L:");
	DispList(L);
	printf("  (12)释放顺序表L\n");
	DestroyList(L);
	return 1;
}

 

你可能感兴趣的:(数据结构,C++新手入门实例)