天天看點

C語言資料結構(3)--順序存儲線性表

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;
}