天天看點

資料結構小結——順序表(數組版)

何為順序表,引用百度百科中的一段話來說

順序表是在計算機記憶體中以數組的形式儲存的線性表,是指用一組位址連續的存儲單元依次存儲資料元素的線性結構。線性表采用順序存儲的方式存儲就稱之為順序表。順序表是将表中的結點依次存放在計算機記憶體中一組位址連續的存儲單元中。

假設存儲的資料類型位int型,則線性表的順序存儲類型可以用結構體表示為:

#define MAX 64;

typedef int SeqData;

typedef struct _seqlist
{
    SeqData data[MAX];
    int len;
}SeqList;
           

這種資料是由數組來存儲的,數組的記憶體屬于靜态配置設定,大小固定,不可以改變,是以一旦數組存滿,再繼續存儲會記憶體溢出,導緻程式崩潰。

當然凡是都有例外,C99中支援了柔性數組這種東西,不過此篇不做介紹。

順序表具體怎麼操作呢,其實很簡單。下面将簡單介紹,代碼均隻有片段。需要完整代碼請直接下載下傳(免積分)順序表(數組版)代碼

第一步肯定是建立表初始化。由于用的是數組,是以操作都在棧記憶體上,系統自動配置設定記憶體,表直接建立就好了

SeqList sqlist;

初始化其實隻需要令表的長度為0即

sqlist.len = 0;

第二步由于數組存在越界風險,是以在進行一些操作之前需要判斷表是否滿或空。

sqlist.len == MAX    //表為滿
sqlist.len ==       //表為空
           

第三步進行資料插入,插入前一定要判斷表是否已滿,表滿則無法繼續插入,插入有頭插法,尾插法,中間插法。

//頭插法
//将所有元素向後移一位
int i;
for(i = s->len; i > ; i--)
{
    s->data[i] = s->data[i-1];
}
//在頭部插入資料
s->data[0] = data;
//表長度加一
s->len++;
           

尾插法比較簡單,隻要表不滿,就能直接插入

//尾插法
//在尾部插入資料
s->data[s->len] = data;
//表長度加一
s->len++;
           

中間插法即通過下标選擇插入的地點,此方法可以模拟頭插和尾插

//中間插法
//數組從下标為pos位,所有元素後移一位
int i;
for(i = s->len; i > pos; i--)
{
    s->data[i] = s->data[i-1];
}
//在下标pos處插入資料
s->data[pos] = data;
//表長度加一
s->len++;
           

第四步删除資料,同理,在删除資料之前要先判斷順序表是否為空,删除就不要搞什麼頭删尾删了。在此給兩個例子

//删除下标為pos的資料,原理差不多。
int i;
for(i = pos; i < s->len; i++)
{
    s->data[i] = s->data[i+1];
}
s->len--;
           
//删除所有值為data的資料
int i = ;
int j;
int len = s->len;
while(len--)
{
    //找到一個删除一個
    if(s->data[i] == data)
    {
        for(j = i; j < s->len-; j++)
        {
            s->data[j] = s->data[j+1];
        }
        s->len--;
    }    
    i++;
}
           

其他還有一些操作可以下載下傳後慢慢研究,比較簡單就不寫下來了。

順序表相對其他的資料結構而言雖然簡單,但是很基礎,不能大意喲。

資料結構小結——順序表(數組版)

繼續閱讀