数据结构-线性表之顺序表
生活随笔
收集整理的這篇文章主要介紹了
数据结构-线性表之顺序表
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
????線性表包括順序表和鏈表(單鏈表、雙鏈表等),這里我們簡單探討一下線性表中順序表的基本操作和實現。
????線性表其實就是對數組的一個實現,其邏輯上和物理存儲上的地址都是連續的(數組的下標是從0開始的,而線性表的下標是從1開始的)。
????首先聲明一個順序類型的線性表:
//定義一個結構體類型 #define InitSize 100 //初始大小 typedef struct {int data[InitSize]; //定義一個int型數組,理論上在偽代碼中該類型應該為泛型即任意類型(ElementType),在此我用int代替方便代碼的編寫int length, maxSize; //長度、最大容量 }SeqList; //別名然后依次實現線性表的相關操作;
向線性表中插入一個元素:
/* function:線性表的插入 1.插入的位置不能大于線性表的長度+1(可以等于:即插在末尾) 2.在某個指定位置插入時,需要依次將需要插入元素位置的元素向后移動,且從最后一個開始移動 3.長度加一 */ /* L: 線性表 i:需要插入的元素下標索引 e:需要插入的元素(int e:這里假設為int類型,實際上用偽代碼表示為不局限任何類型ElementType) */ bool ListInsert(SeqList L, int i, int e) {//不能大于長度+1 且不能小于1if (i<1 || i > L.length+1) {return false;}for (int j = L.length - 1;j >= i - 1;j--) {L.data[j + 1] = L.data[j];}L.data[i - 1] = e;L.length++;return true; }從線性表中刪除一個元素:
/* function:刪除指定下標的元素 1.將需要刪除元素下標后的元素位置全部向前移動一位即可 2.長度減一 */ /* L: 線性表 i:需要刪除的元素下標索引 */ bool ListDelete(SeqList L,int i) {if (i<1 || i > L.length) {return false;}for (int j = i;j < L.length; j++) {L.data[j-1] = L.data[j];}L.length--;return true; }從線性表中查找指定的元素:
/* function:查找指定元素 1.依次遍歷線性表進行判斷,存在即返回下標 */ /* L: 線性表 e:需要查找的元素的 */ int ListFind(SeqList L, int e) {for (int j = 0;j < L.length;j++) {if (L.data[j] == e) {return j+1;}}return 0; }刪除線性表中的最小值:
/* function:刪除線性表中最小的值,并將最后一個元素填充 1.遍歷線性表取出最小值 2.將最后一個元素賦值給當前位置 3.返回最小值 */ int ListDeleteMin(SeqList L) {if (L.length == 0) {return 0;}int min = 0;for (int i = 0;i < L.length;i++) {if (L.data[i] < min) {min = L.data[i];L.data[i] = L.data[L.length - 1];}}return min; }將線性表反轉:
/* function:將線性表反轉 */ void ListReverse(SeqList L) {if (L.length == 0) {return;}int length = L.length / 2;for (int i = 0;i <= length;i++) {int startIndex = i;int endIndex = L.length - i - 1;int temp;temp = L.data[endIndex];L.data[i] = temp;L.data[endIndex] = L.data[i];} }以上為線性表-順序表的簡單操作。
總結
以上是生活随笔為你收集整理的数据结构-线性表之顺序表的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 2个人一起玩的手机游戏有哪些(自由的百科
- 下一篇: 数据结构-链表之单链表