資料結構順序表的建立及操作
-
結構體建立(兩種結構體定義方式)
方式一:給結構體Sqlist定義了個别名
typedef struct Sqlist{
int elem[MAXSIZE];
int length;
}Sqlist_t;
方式二:定義一個名字為Sqlist的結構體
struct Sqlist{
int elem[MAXSIZE];
int length;
};
差別之處在于第一種方式給結構體定義了個别名
注釋:
int elem[MAXSIZE]:表示定義一個資料類型為int的數組用于存儲int型資料(根據你要存儲的資料類型可自由修改),MAXSIZE代表數組長度
int length:表示結構體的另一個屬性(用于表示從第幾個資料開始為空)
2.初始化指派
void create(Sqlist &L){
int n;
printf("要輸入資料的個數:");
scanf("%d",&n);
fflush(stdin);
while(n > MAXSIZE){
printf("越界、請從新輸入:");
scanf("%d",&n);
fflush(stdin);
}
L.length = ;//表示第幾個資料開始為空
for(int i = ; i < n; i++){
L.elem[L.length]=i;
L.length++;
}
}
3.資料展示
void show(Sqlist L){
int i = ;
while(i<L.length){
printf("%d\n",L.elem[i]);
i++;
}
}
4.資料删除
void delData(Sqlist &L,int id){
if(id < || id >= L.length){
printf("輸入有誤!");
}else{
for(int i = id; i < L.length; i++){
L.elem[i-] = L.elem[i];
}
L.elem[L.length]=NULL;
L.length--;
}
}
注釋:
id:表示要删除的位置(要做判斷避免越界);
從第id個位置開始将後面的資料都往前提一位(for循環的功能);
L.elem[L.length]=NULL;表示将最後一位設為NULL(空);
L.length–;表示第幾個位置開始為空;
5.添加資料
void addData(Sqlist &L,int id,int data){
if(id < || id > L.length){
printf("輸入有誤!");
}else{
for(int i = L.length; i >= id; i--){
L.elem[i] = L.elem[i-];
}
L.elem[id-] = data;
L.length++;
}
}
注釋:
id:表示位置、位置必須連續
從第id個位置開始将後面的資料都往後一位(for循環的功能);
L.elem[id-1]=data;表示将第id位設為data;
L.length++;表示第幾個位置開始為空;
6.取資料(按位置取、并傳回值)
int selectData(Sqlist L,int id){
if(id < || id >= L.length){
printf("輸入有誤!");
return -;
}else{
int data = L.elem[id-];
return data;
}
}
7.資料比對(按值比對,傳回第一次出現的位置)
int findId(Sqlist L,int data){
for(int i = ; i < L.length; i++){
if(L.elem[i] == data){
return i+;
}
}
return -;
}
注釋:
周遊每一個位置進行比對、比對成功,則傳回位置。否則傳回-1
8.主方法
void main(){
Sqlist La;//定義一個名字為La的結構體變量
create(La);//初始化指派
show(La);//資料展示
addData(La,,);//在第四個位置添加資料20
show(La);
delData(La,);//删除第七個位置資料
show(La);
int data = selectData(La,);//查找第二位置的資料
printf("%d\n",data);
int id = findId(La,);//比對資料8的第一個位置
printf("%d\n",id);
}
謝謝大家、歡迎補充!大家一起學習。