資料結構 順序表

2021-09-02 08:19:20 字數 3609 閱讀 9369

先語:前面記錄了怎麼評判演算法好壞的時間複雜度,空間複雜度。下面正式記錄乙個資料結構,順序表。在說順序表的時候,先來說說線性表。因為順序表屬於線性表。線性表通俗的說,就是一根線一樣,一連串的。這是邏輯上的。物理儲存上的並不是像陣列一樣一連串的記憶體空間啊。當然也有物理上是連續的 就是下面要說的順序表,

n個具有相同特性的資料元素的有限序列。(和陣列有點像)

順序表鍊表棧佇列

(當然這裡只是列舉了常見的。)

正式有請——

一段實體地址連續的儲存單元依次儲存資料元素的線性結構。一般情況寫採用陣列儲存。

(一看到陣列是不是就覺得沒那麼高大上了呢?其實不只只是陣列嘿)

1、  靜態順序表

//c語言

#define n 100 //靜態的,必須先規定容量

typedef struct seqlistnode

seql;

2 、動態順序表

typedef strcut seqlistnode    

seql;

「紙上得來終覺淺,絕知此事要躬行。」所以現在來寫寫。因為靜態順序表我們用的並不多,而且陣列的個數都是規定好了的。要麼存在長度太小存不下,要麼長度太大,浪費記憶體。所以,下面記錄的是動態順序表。一方面,它有點難,另一方面,用的相對較多。看我部落格的前輩或道友們,如果如果下面的**有什麼問題,還請不吝賜教。直接上**。

//c語言

typedef struct seqlist sql;

//先建立乙個表。這個表有乙個 int 指標,還有乙個有效個數的 size,還有乙個最大個數容量的maxnum

//下面初始化。結構體前面學過哈。

void sql_init(sql* sl, size_t maxnum)

void sql_destroy(sql* sl)

void print_arr(sql* sl)

printf("\n");

}//擴容介面

void check_maxnum(sql* sl)

free(sl->arr); //釋放老陣列的記憶體

sl->arr = newarr; //搬運資料

free(newarr); //釋放掉不用的新的陣列

printf("擴容成功");

}}

這裡建立了乙個初始的表。裡面的引數是這個樣子的。得注意,這是size個資料,陣列的下標是從 0 開始的。所以陣列下標是 0 ~ size -1;

我們把服務用的函式都寫好了。其實也可以叫介面。這裡呢沒有寫標頭檔案。服務就是準備開始。或者救災救難的。比如擴容的啊,初始化啊。在**裡面有詳細的注釋交代。因為邊看到** 便看注釋,比較好。如果**的可讀性不好,一看注釋就好了。不羅嗦了。下面是順序表的操作,增刪查改

//c語言

//查尋介面

//返回的是下標

int sql_find(sql* sl, int num)

} return -1; //沒找到返回 -1;別寫 return 0,因為這就返回第 0 個下標的資料

}//修改某一位置的資料

void sql_updata(sql* sl, size_t pos, int num)

//增介面

//頭插

void sql_add_front(sql* sl, int num)

sl->arr[0] = num; //給第乙個下標賦值

++sl->size; //插入資料了,就要把有效個數加 1 了。

} //尾插

void sql_add_end(sql* sl, int num)

//隨機加入

//c語言

//刪介面

//頭刪

void sql_del_front(sql* sl)

--sl->size; //刪除完成,有效個數就要減少1

} //尾刪

void sql_del_end(sql* sl)

//隨機刪除

void sql_del_randpos(sql* sl, size_t pos) //這是隨機位置刪除

--sl->size; //刪除完了,一定要記得--size啊。

}void sql_del_randnum(sql* sl, int num) //這是刪除第乙個遇見的數。如,陣列中

//有 不知乙個 num ,就刪除下標最小的 num

//c語言

//拓展

//氣泡排序

void sql_bubblesort(sql* sl) //氣泡排序就不多說了。

} if (con == 1) //這是優化程式的語句

}} //折半查詢

int sql_half_find(sql* sl, int num)

else if (sl->arr[mid] < num)

else

}return -1;

}

//刪除相同的數

//意思就是刪除陣列中與 num 相同的所有的數

void sql_del_allsame(sql* sl, int num)

//遇見的話,就不管,直到遇見不等於 num 的數,把這個數覆蓋到 num 上

}sl->size = notsame; //畫圖來解釋

現在把這個刪除相同的數用圖來表示。方便理解

終於把這個畫完了,有點囉嗦,但是好理解啊。

到這兒順序表介紹完畢。歡迎評價和指出錯誤。

資料結構 順序表

順序表的特徵 1由唯一的表名標識 2佔據一塊連續的儲存空間 3資料順序存放,元素之間有先後關係 定義動態的順序表 define maxsize 100 typedef struct sqlist 這個結構體型別存放的是順序表的資訊和順序表的資料 初始化順序表 void initsqlist sqli...

資料結構 順序表

順序表示最簡單的乙個資料結構,直接貼 吧,因為比較簡單。include include typedef struct sqlist sqlist void initlist sqlist l l length 0 void getelem sqlist l 初始化 l length j printf...

資料結構順序表

include include include include include include include include include include include include include include using namespace std define maxn 100000...