#pragma once
#include#include#define max_size 10
typedef int datatype;
typedef struct seqlist
seqlist,*pseqlist;
靜態順序表的特點是順序表中的元素個數是固定的,這裡的max_size等於10,就說明順序表中最多存放10個資料。
//順序表初始化
void seqlistinit(pseqlist ps)
順序表初始化操作就是把順序表中表示有效元素的個數的變數置為0
//順序表尾插資料
void seqlistpushback(pseqlist ps, datatype data)
if(ps->_size == max_size)
ps->_array[ps->_size] = data;
ps->_size++;
}
尾插操作要先判斷順序表是否存在,然後判斷有效元素個數的數量是否達到max_size,之後在順序表尾部ps->size處插入資料data(下標比size少1,所以size即表示插入時所需的下標)
//順序表尾刪
void seqlistpopback(pseqlist ps)
ps->_array[ps->_size-1] = 0;
--ps->_size;
}
尾刪操作先判斷順序表是否存在,再判斷順序表是否為空(為空直接返回)
//順序表頭插資料
void seqlistpushfront(pseqlist ps, datatype data)
for(i = ps->_size-1; i>=0;--i)
ps->_array[0] = data;
ps->_size++;
}
頭插操作要先判斷順序表是否存在,然後判斷有效元素個數的數量是否達到max_size,先將前size個元素全部向後移動一位,留出下標為0的位置的空間將data放進去
//順序表頭刪資料
void seqlistpopfront(pseqlist ps)
for(;i < ps->_size-1; i++)
ps->_size--;
}
頭刪開始和尾刪相同,都先判斷。然後將前size個元素全部向前移動一位(下標為0的元素被覆蓋),完成頭刪操作
//顯示順序表中的資料個數
int seqlistsize(pseqlist ps)
return ps->_size;
}
先判空,不滿足條件列印size
//列印順序表
void printseqlist(pseqlist ps)
for(; i_size;++i)
printf("%d",ps->_array[i]);
printf("\n");
}
先判空,然後列印前size個元素
//任意位置插入
void seqlistinsert(pseqlist ps,int pos, datatype data)
if(max_size == ps->_size)
for(i = ps->_size-1;i >= pos;--i)
ps->_array[pos] = data;
ps->_size++;
}
判斷條件:順序表是否存在,pos滿足大於0且小於size,順序表沒有滿。將從後往前數size-pos個元素向後移動留出下標為pos的位置的空間插入data
//任意位置的刪除
void seqlisterase(pseqlist ps,int pos)
if(0 == ps->_size)
for(; i < ps->_size-1;i++)
ps->_size--;
}
判斷條件:順序表是否存在,pos大於0且pos小於size,順序表是否為空。將從後往前size-pos個元素全部向前移動一位(下標為pos的元素被覆蓋),完成刪除操作
// 在順序表中查詢值為第乙個data的元素,找到返回該元素在順序表中的位置,否則返回-1
int seqlistfind(pseqlist ps,datatype data)
return -1;
}
從下標為0的元素開始找起,找到data元素返回其下標,沒找到返回-1
// 移除順序表中第乙個值為data的元素
void remove(pseqlist ps, datatype data)
使用函式seqlistfind(查詢元素)和seqlisterase(刪除任意位置的元素)實現該操作
// 移除順序表中所有值為data的元素
void removeall(pseqlist ps, datatype data)
ps->_size -= count;
}
定義乙個計數變數count,每當找到順序表中對應的data元素時,count++,找到乙個就需要把從後往前i-count個元素全部向前移動一位(當count改變且第一次執行else操作時的i-1為找到data元素的下標,i-count為所需移動的位數。例:第一次找到data時,count=1,每次向前移動一位,第二次找到data是count=2,從第二次找到data的下標i-1開始,每次向前移動兩位)
void swap(int* pleft, int *pright)
// 使用氣泡排序對順序表中的元素進行排序
void bubblesort(pseqlist ps)
} if(!ischange)
break;
}}
swap函式為輔助函式,作用是交換兩個變數的值。
從下標為i的元素開始排序,把元素值較大的元素放在最後
ischange變數的作用是,在第一趟冒泡的排序的時候,如果順序表本來就有序,則無需進行後續的排序操作,迴圈直接退出
//選擇排序
void selectsort(pseqlist ps)
if(maxpos != ps->_size -1 -i)
swap(&ps->_array[maxpos],&ps->_array[ps->_size-1-i]);
}}
標記最大元素的下標,一趟排序結束後和第size-1-i位置的元素做比較,將最大的元素放在此位置。
缺陷:只能從小到大排序。
優化方式:定義乙個函式指標,使用者自己決定選擇排序方式。
資料結構靜態順序表
define max size 10 typedef int datatype struct seqlist 以上 就是建立乙個順序表,其中seqlist是整個順序表的空間而size是順序表中元素的個數。接下來我將用靜態順序表來實現尾插,頭插,任意插入資料,尾刪,頭刪等 標頭檔案 ifndef se...
資料結構 靜態順序表
本篇全部 都在linux系統下完成 用一段位址連續的單元依次儲存資料元素的線性結構,順序表又分為靜態順序表和動態順序表 首先建立乙個結構體seqlist,在結構體中我們定義了乙個陣列seqlist,用來存放資料,以及乙個無符號整形變數size,用來控制順序表有效資料的個數。即我們通過乙個簡單的陣列實...
資料結構靜態順序表
順序表 用一段位址連續儲存單元依次儲存資料元素的線性結構 pragma once 防止標頭檔案重複包含 define max size 10 include include include 實現基於靜態陣列的順序表的以下基本操作 首先先定義乙個結構體型別seqlist arr size 有效的元素個...