栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

C语言线性表(实现线性表里面的函数)

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

C语言线性表(实现线性表里面的函数)

#include 
#include 

#define KSIZE 10//定义常量:线性表的长度
#define FALSE 0
#define TRUE 1








int count;
void InitList(int *list);//InitList(&L) &代表*
void DestroyList(int *list);
void ClearList(int *list);
int ListEmpty(int *list);
int ListLength(int *list);
int GetElem(int *list, int i, int *e);
int LocateElem(int *list, int e);
int ListInsert(int *list, int i, int e);
int ListDelete(int *list, int i, int *e);
void ListTraverse(int *list);

int main(void)
{
	int arr[KSIZE];
	int e = 0;

	InitList(arr);
	ListInsert(arr, 0, 5);
	ListInsert(arr, 0, 8);
	ListInsert(arr, 1, 7);
	ListTraverse(arr);
	ListDelete(arr, 0, NULL);
	ListTraverse(arr);
	

	GetElem(arr, 1, &e);
	printf("e = %dn", e);

	printf("5的索引是%dn", LocateElem(arr, 5));

	ClearList(arr);

	if(ListEmpty(arr))
	{
		printf("线性表为空n");
	}
	else
	{
		printf("线性表不为空n");
	}

	printf("线性表的长度为%dn", ListLength(arr));
	DestroyList(arr);
	
	system("pause");
	return 0;
}

void InitList(int *list)// &L你可以想象成一个容器(数组)   :初始化线性表
{
	int i = 0;
	count = 0;
	for(i = 0; i < KSIZE; i++)//遍历线性表,赋值为0,相当于初始化
	{
		list[i] = 0;
	}
}

void DestroyList(int *list)
{}

void ClearList(int *list)//&L你可以想象成一个容器(数组)                 :清空线性表
{
	int i = 0;
	count = 0;
	for(i = 0; i < KSIZE; i++)
	{
		list[i] = 0;//和初始化一样,相当于清空线性表
	}
}

int ListEmpty(int *list)//L你可以想象成一个容器(数组)                :线性表是否为空
{
	if(count == 0)//判断线性表是否为空,如果==0代表为空,就为true.代表是的,为空!
	{
		return TRUE;
	}
	else
	{
		return FALSE;
	}
}

int ListLength(int *list)//返回线性表的长度(看这里,你会懂)#define KSIZE 10 int arr[KSIZE] ListLength(arr)
{
	return count;
}

int GetElem(int *list, int i, int *e)//L你可以想象成一个容器(数组) i代表索引  &e代表获取的元素是啥?             :获取线性表中指定的元素
{
	if(i < count && i >= 0)//索引必须大于或者等于0,因为索引是从零开始的。 i必须小于count,因为不能大过数组
	{
		*e = list[i];//获取的元素在索引1的位置,赋值给*e,代表*e哪里知道获取哪一个元素
		return TRUE;
	}
	else
	{
		return FALSE;
	}
}

int LocateElem(int *list, int e)//L你可以想象成一个容器(数组),e代表想从数组里面查找有没有这个e元素	   :给定元素获取第一次出现的索引位置
{
	int i = 0;
	for(i = 0; i < count; i++)//遍历线性表数组,
	{
		if(list[i] == e)//如果等于e这个元素的数组元素,就输出其索引位置.
		{
			return i;
		}
	}

	return -1;
}




int ListInsert(int *list, int i, int e)//&L你可以想象成一个容器(数组)  i指定位置  e插入的元素是啥?         :将元素插入链表中指定位置
{
	if(i <= count && i >= 0)//为什么(i <= count,因为插入的位置要+1啊
	{
		int k = 0;
		for(k = count-1; k >= i; k--)
		{
			list[k+1] = list[k];//以上是所有的元素往后退一位
		}
		list[i] = e;//然后e代表list[0]了呀
		count++;//然后count++代表又满了,又的++count又扩大
		return TRUE;
	}
	else
	{
		return FALSE;
	}
}

int ListDelete(int *list, int i, int *e)//&L你可以想象成一个容器(数组)  i指定元素  &e删除的元素是啥?       :从链表中指定位置删除元素
{
	if(i < count && i >= 0)//删除不用扩大空间
	{
		int k = 0;
		if(e != NULL)//e赋值给*e代表*e是要删除的元素是啥?
		{
			*e = list[i];
		}
		
		for(k = i; k < count - 1; k++)//往前进一步
		{
			list[k] = list[k+1];
		}
		count--;//然后count--,代表删除成功了呀
		return TRUE;
	}
	else
	{
		return FALSE;
	}
}

void ListTraverse(int *list)
{
	int i = 0;
	for(i = 0; i < count; i++)
	{
		printf("%d ", list[i]);//遍历元素输出即可
	}
	printf("n");
}
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/879759.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号