顺序线性表概念
线性表简单的说就是有序的元素集合,像Java里面的List。
数组其实就是一个简单线性表,但是更多的只能代表线性表的一种存储结构,如果是一个完善的线性表的话,还应该包括删除元素、查询元素、修改元素等操作。
线性表的存储结构最常见的有两大类,一个是用一维数组,一个使用链表,本篇演示一维数组实现的线性,即顺序线性表;链表实现的线性表可以称之链式线性表。
有哪些操作
- 显示线性表元素个数
- 列出线性表的所有元素
- 获取指定位置元素
- 在指定位置插入元素
- 删除指定位置元素
- 清空线性表
大体上常用的也就这些操作了,下面我们来具体实现下。
顺序线性表代码实现
/*
* 顺序线性表
* 作者:熊猫大大
* 时间: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;
}