順序表的建立

2021-08-21 17:29:38 字數 2797 閱讀 5622

定義

資料結構是相互之間存在一種或多種特定關係的資料元素的集合。根據資料元素之間關係的不同特性,通常有如下4類基本結構:

順序表的特徵是,在記憶體中占用連續的儲存單元,可以簡單的理解為順序表就是陣列。只是根據需要,在實際應用中動態分配順序表占用的記憶體單元。而陣列是在編譯的時候,預分配了指定大小的記憶體單元,因此如下**段會在編譯的時候報錯。

int len = 10;

char arr[len];

但是順序表又會有資料全部的特點:可以根據下標直接訪問、不方便插入和刪除元素(因為需要移動後續的元素)。

typedef int seqtype; //儲存單元型別

typedef struct sqlist;

結構體內,有三個元素:儲存空間基位址,類似於陣列首位址;當前長度,記錄順序表中有效儲存單元個數;當前分配的儲存容量,順序表中,最多容納的儲存單元個數。當順序表中所有儲存單元已經被使用,在下次插入元素之前,需要新增儲存單元。這點是陣列所不具有的特性。

*注:定義乙個儲存單元型別seqtype是為了使順序表適和更多資料型別,使用的時候修改seqtype型別即可

/**

* 建立順序表

*/sqlist createlist_sq()

這裡提供兩種建立順序表的**,一種是由系統分配list占用的記憶體,一種是自己動態分配的記憶體,需要在程式執行之前手動釋放占用的記憶體空間。

/**

* 初始化順序表

* 返回1 表示初始化成功

* 返回0 表示初始化失敗

*/int initlist_sq(sqlist &l)

分配順序表的儲存單元,初始化順序表屬性的值。

/**

* 插入順序表

* 下標是負數就插入到結尾

*/int insertlist_sq(sqlist &l, int index, seqtype val)

if (index < 0) //下標是負數,插入到結尾

index = l.length;

if (l.length == l.listsize)

l.elem = newbase;

l.listsize += listincrement;

}//尋找合適的插入位置,index後面的元素向後移動

for (int i = l.length; i > index; i--)

l.elem[index] = val; //插入元素

l.length++;

return 1;

}

將元素插入到指定的位置。插入之前,需要先判斷順序表中是否已經存滿,再根據需要新增儲存單元,最後插入元素。

/**

* 插入順序表(結尾的位置)

* 與上面的函式是重名函式,這叫函式過載,在c++裡面支援

*/int insertlist_sq(sqlist &l, seqtype val)

*引用和過載,是c++中才支援,因此需要在cpp檔案中編譯。

/**

* 刪除指定的元素

* 返回0 找不到指定的元素,刪除失敗。

* 返回1 找到待刪除的元素,刪除成功。

*/int removelist_sq(sqlist &l, seqtype val)

}if (index < 0)

return 0;

for (; index < l.length - 1; index++)

l.length--;

return 1;

}

刪除指定元素,需要先找到下標。依次移動下標後面的結點,修改length值。

/**

* 根據下標刪除是指定的結點,並返回元素的值

* 返回0 下標超出順序表長度,刪除失敗。

* 返回1 下標正確,刪除元素,並且將已刪除元素值轉給elem

*/int removelist_sq(sqlist &l, int index, seqtype &elem)

l.length--;

return 1;

}

先取到指定下標的元素,賦值給elem,然後依次移動下標後面的結點。最後修改length值。

/**

* 銷毀順序表

*/void destorylist_sq(sqlist &l)

重點釋放順序表的儲存單元。如果順序表自身的記憶體也是動態分配的,需要手動釋放。

最後附上,乙個順序表的例項:

#includeusing namespace std;

typedef struct

list;

void creat(list &l,int n)

l.listsize=101;}

void listdelete(list &l)

}return 0;

}

順序表的建立

下標法 1 include 2 include 3 include 4 include 5 define error 0 6 define ok 1 7 define maxsize 1000000 8using namespace std 9 typedef int status 10 typed...

順序建立鍊錶

資料結構實驗之鍊表一 順序建立鍊錶 timelimit 1000ms memory limit 65536k 題目描述輸入n 個整數,按照輸入的順序建立單鏈表儲存,並遍歷所建立的單鏈表,輸出這些資料。輸入第一行輸入整數的個數n 第二行依次輸入每個整數。輸出輸出這組整數。示例輸入 81256 4 6 ...

順序建立鍊錶

對鍊錶的操作今天上課聽的有點懵,沒反應過來,主要還是當時沒學太好,所以忘得更徹底,剛剛重新學了一波,趕緊總結一下 題目 輸入n個整數,按照輸入的順序建立單鏈表儲存,並遍歷所建立的單鏈表,輸出這些資料。input 第一行輸入整數的個數n 第二行依次輸入每個整數。輸出這組整數。sample input ...