定義
資料結構是相互之間存在一種或多種特定關係的資料元素的集合。根據資料元素之間關係的不同特性,通常有如下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 ...