線性表
線性表即零個或多個資料元素的有限序列。首先它是乙個序列,其次它的元素之間是有順序的,若存在多個元素,則首個元素無前驅,末尾元素無後繼,除此之外,每個元素都有乙個前驅和乙個後繼。用n來表示線性表元素的個數,當n=0時,即表明線性表中無元素,稱為空表。
線性表又可分為動態線性表和靜態線性表。靜態線性表的容量大小是固定的,而動態線性表的容量可根據表中元素實現自動擴容。
線性表的順序儲存結構——順序表,指的是用一段連續的儲存單元一次儲存線性表的資料元素。
順序表的相關操作(以動態順序表為例):插入、刪除等操作
宣告部分:
#include#includetypedef int elemtype;
typedef struct
sqlist;
1.插入操作。由於動態線性表需要擴容,所以特意寫乙個擴容函式
//擴容
void listaddcapicity(sqlist* sl)
else
sl->data = (elemtype*)realloc(sl->data, newcapicity*sizeof(elemtype));
sl->capicity = newcapicity;
}
//初始化
void initlist(sqlist* sl)
//插入
void listinsert(sqlist* sl, int i, elemtype e)
for (int j = sl->length-1; j >= i; j--)
sl->data[i] = e;
sl->length += 1;
}
2.刪除。刪除順序表的第i個位置的元素,刪除成功則返回true,否則返回false
bool deletelist(sqlist* sl, int i)
else
sl->length -= 1;
} return bret;
}
3.判空。判斷順序表是否為空
void listempty(sqlist* sl)
else
}else
}
4.計算線性表的長度。
int listlength(sqlist* sl)
else
}
5.定位。定位順序表中某一元素的位置,若定位成功,則返回下標,否則返回-1
int locatelist(sqlist* sl, elemtype e)
} return -1;
}
6.求後繼元素。找出順序表中某一元素的後乙個元素(先得通過定位函式得到所找元素的下標)
void nextelem(sqlist* sl, elemtype e)
else
else
}}
7.求前驅元素。找出順序表中某一元素的前驅元素(先得通過定位函式得到所找元素的下標)
void priorelem(sqlist* sl, elemtype e)
else
else
}}
8.獲取元素。獲取所找下標的元素
elemtype getlist(sqlist* sl, int i)
else
}
9.銷毀。銷毀線性表,與清空不同
void destorylist(sqlist* sl)
}
10.清空。
void clearlist(sqlist* sl)
}
11.列印。
void showlist(sqlist* sl)
puts("\b;");
}
測試**:
int main()
線性表順序儲存的優點與缺點:
優點:無須為表示元素之間的邏輯關係而增加額外的儲存空間;
可以快速地訪問表中任一位置的元素。
缺點:插入和刪除操作需要移動大量元素;
當線性表長度變化較大時,難以確定儲存空間的容量;
造成儲存空間的「碎片」。
資料結構 線性表順序儲存(順序表)
特點 線性表的順序儲存是指用一組位址連續的儲存單元依次儲存線性表中的各個元素。作用 線性表中在邏輯結構上相鄰的資料元素儲存在相鄰的物理儲存單元中,即通過資料元素 物理儲存的相鄰關係來反映 資料元素之間 邏輯上的相鄰關係 順序儲存的實現 一維陣列儲存順序表中的資料 缺點 大小固定,使用前需要分配位址,...
資料結構之線性表 順序儲存
從新在學習一遍資料結構,每天盡量都寫點!fuction the list struct by xiaolong date 2012年 03月 13日 星期二 16 50 12 cst 功能 線性表的順序儲存實現 主要功能 include include define max size 20 defi...
資料結構 線性表之順序儲存
第i個元素與第乙個元素的儲存位置滿足 loc ai loc a1 i 1 m include include include include 線性表的順序儲存 define max size 100 定義線性表最大長度 順序儲存的缺陷之一 typedef structdata typedef str...