线性表顺序存储方式实现

线性表顺序存储方式实现


0. 定义线性表顺序存储结构

#include <stdio.h>
#include <stdlib.h>
#define MAXSIZE 100

#define OK 1
#define ERROR 0
#define TRUE 1
#define FALSE 0
typedef int Status;

typedef struct SeqList{
	int elem[MAXSIZE];
	int length;
}SeqList;

1. 初始化线性表

// 初始化操作 建立一个空的线性表 list 
Status Init(SeqList* list)
{
	list->length = 0;
	return OK;
}

2. 判断线性表是否为空

// 若线性表为空 返回 TRUE, 否则返回 FALSE 
Status ListEmpty(SeqList list)
{
	
	if (list.length == 0)
		return TRUE;
	else
		return FALSE;
}

3. 清空线性表

// 将线性表清空
Status ClearList(SeqList* list)
{
	//for (int i = 0;i < list->length;i++)
	//{
	//	list->elem[i] = 0;
	//}
	list->length = 0;
	return OK;
}

4. 获取线性表中指定位置的元素

// 将线性表 list 中第 i 个元素返回给 e
Status getElem(SeqList list, int i, int* e)
{
	// if (i < 1 || i > length)
	if (list.length == 0 || i < 1 || i > list.length)
		return ERROR;
	*e = list.elem[i-1];
	return OK;
}

5. 定位给定元素在线性表中的位置

// 在线性表 list 中查找与 给定元素 e 相等的元素,如果查找成功返回该元素在表中序号表示成功
// 返回 0 表示失败
int LocateElem(SeqList list, int e)
{	int i;
	if (list.length == 0)
		return 0;
	for (i = 0;i < list.length;i++)
	{
		if (list.elem[i] == e)
			break;
	}
	if (i >= list.length)
		return 0;
	return i+1;
}  

6. 在线性表指定位置插入元素

// 在线性表 list 的第 i 个位置插入新元素 e
Status ListInsert(SeqList* list, int i,int e)
{
	if (i >list->length+1 || i < 1 || list->length == MAXSIZE)
		return ERROR;
	for(int pos = list->length; pos >= i; pos--)
	{
		list->elem[pos] = list->elem[pos-1];
	}
	list->elem[i-1] = e;
	
	// ***
	list->length +=1;
	return OK;
} 

7. 删除线性表指定位置的元素

// 删除线性表 list 中第 i 个位置元素,并用 e 返回其值
Status ListDelete(SeqList* list, int i, int* e)
{
 	if (i < 1 || i > list->length || list->length == 0)
 		return ERROR;
 	*e = list->elem[i-1];
 	for (int pos = i-1;pos < list->length-1;pos++)
 	{
 		list->elem[pos] = list->elem[pos+1];
 		
	}
	list->length -= 1;
	return OK;
}

8. 求两个线性表的并集

// 删除线性表 list 中第 i 个位置元素,并用 e 返回其值
Status ListDelete(SeqList* list, int i, int* e)
{
 	if (i < 1 || i > list->length || list->length == 0)
 		return ERROR;
 	*e = list->elem[i-1];
 	for (int pos = i-1;pos < list->length-1;pos++)
 	{
 		list->elem[pos] = list->elem[pos+1];
 		
	}
	list->length -= 1;
	return OK;
}

9. 案例测试

int main(void)
{
	SeqList list;
	Status status;
	status = Init(&list);
	printf("初始化 list 后:list.length = %d\n",list.length);
	
	// 插入 5 个元素
	for(int i = 1;i <= 5;i++)
		status = ListInsert(&list,i,i);
	Display(list);
	
	// 删掉 第 4 个元素
	int tempValue;
	status =  ListDelete(&list,3,&tempValue);
	Display(list);
	
	// 获取第 2 个元素
	status = getElem(list,2,&tempValue);
	printf("%d\n",tempValue); 
	
	// 查找元素 4 在 list 中的位置
	tempValue = LocateElem(list,11);
	printf("*********************************\n"); 
	
	SeqList list2;
	status = Init(&list2);
	
	// 插入 8 个元素
	for(int i = 1;i <= 8;i++)
		status = ListInsert(&list2,i,i+5);
	UnionList(&list,list2);
	Display(list);
	
	return 0;
}
发布了30 篇原创文章 · 获赞 58 · 访问量 3万+

猜你喜欢

转载自blog.csdn.net/annjeff/article/details/101622099