0. 系列文章索引
點此檢視系列文章
1. 順序存儲線性表的概念
線性表簡單的說就是有序的元素集合,像Java裡面的List。
數組其實就是一個簡單的線性表,但是更多的隻能代表線性表的一種存儲結構,如果是一個完善的線性表的話,還應該包括删除元素、查詢元素、修改元素等操作。
線性表的存儲結構最常見的有兩大類,一個是用一維數組,一個使用連結清單,本篇示範一維數組實作的線性,即順序存儲線性表;連結清單實作的線性表可以稱之鍊式存儲線性表。
2. 有哪些操作
顯示線性表元素個數
展示線性表的所有元素
擷取指定位置元素
在指定位置插入元素
删除指定位置元素
清空線性表
大體上常用的也就這些操作了,下面我們來具體實作下。
3. 代碼實作
/*
* 順序存儲線性表
* 作者:熊貓大大
* 時間: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;
}