为了账号安全,请及时绑定邮箱和手机立即绑定

C语言数据结构(6)--顺序线性表

标签:
C

顺序线性表概念

线性表简单的说就是有序的元素集合,像Java里面的List。

数组其实就是一个简单线性表,但是更多的只能代表线性表的一种存储结构,如果是一个完善的线性表的话,还应该包括删除元素、查询元素、修改元素等操作。

线性表的存储结构最常见的有两大类,一个是用一维数组,一个使用链表,本篇演示一维数组实现的线性,即顺序线性表;链表实现的线性表可以称之链式线性表。

有哪些操作

  1. 显示线性表元素个数
  2. 列出线性表的所有元素
  3. 获取指定位置元素
  4. 在指定位置插入元素
  5. 删除指定位置元素
  6. 清空线性表

大体上常用的也就这些操作了,下面我们来具体实现下。

顺序线性表代码实现

/*
 * 顺序线性表
 * 作者:熊猫大大
 * 时间:2019-09-22
*/
#include<stdio.h>
#define MAXSIZE 100 //最大元素个数

// 用于保存顺序线性表的结构体
typedef struct {
	int data[MAXSIZE];
	int count;//当前元素个数
}SequenceList;

// 获取元素个数
int getCount(SequenceList *list)
{
	return list->count;
}

// 显示所有元素
void printList(SequenceList *list) 
{
	int i;
	printf("\n所有元素:");
	for (i = 0; i < list->count; i++) 
	{
		printf("%d",list->data[i]);
	}
}

// 获取指定位置元素,返回值放入result指向元素
int getData(SequenceList *list,int index,int *result)
{
	if (index<0 || index>list->count-1) 
	{
		return 0;//0表示失败
	}
	*result = list->data[index];
	return 1;//1表示成功
}

// 插入元素
int insertData(SequenceList *list,int index, int input)
{
	int i;
	if (list->count >= MAXSIZE) //满了
	{
		return 0;
	}
	if (index<0 || index>list->count) //不在合理范围
	{
		return 0;
	}
	if (index != list->count) //插入数据不在表尾
	{
		for (i = list->count;i>=index;i--) 
		{
			list->data[i] = list->data[i - 1];
		}
	}
	list->data[index] = input;
	list->count++;
	return 1;
}
// 删除指定位置元素
int deleteData(SequenceList *list, int index) 
{
	int i;
	if (index<0 || index>list->count - 1) //不在合理范围
	{
		return 0;
	}
	for (i = index; i < list->count - 1; i++) 
	{
		list->data[i] = list->data[i +1];
	}
	list->count--;
	return 1;
}
// 清空所有元素
int clearData(SequenceList *list) 
{
	list->count = 0;
}


// 入口
int main()
{
	//初始化
	SequenceList sequenceList;
	SequenceList *list=&sequenceList;
	list->count = 0;
	//插入元素
	insertData(list, 0, 1);
	insertData(list, 1, 2);
	insertData(list, 2, 3);
	printList(list);
	//获取元素
	int result = -1;
	getData(list, 1, &result);
	printf("\ngetData:%d",result);
	//删除指定位置元素
	deleteData(list,1);
	printList(list);
	//清空元素
	clearData(list);
	printList(list);
	printf("\n");
	return 1;
}
点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
软件工程师
手记
粉丝
1.5万
获赞与收藏
1523

关注作者,订阅最新文章

阅读免费教程

  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消