目錄
- 傳統藝能😎
- 過渡區🤣
- 正片開始👀
- 初始化👏
- 尾插👏
- 格局打開👏
- 尾刪👏
傳統藝能😎
小編是大一菜鳥不贅述,歡迎大佬指點江山(QQ:1319365055)
此前博客點我!點我!請搜索博主 【知曉天空之藍】點我!點我!請搜索博主 【知曉天空之藍】或掃碼進入!
喬喬的gitee代碼庫(打灰人 )歡迎訪問,點我!

過渡區🤣
現在是北京時間16:20,明天就是去硬剛四級了,圖書館里剛做完了手上的資料趁機寫一下博客來提升一下手氣,目前感覺良好,明天不會寄!希望吧家人們,

正片開始👀
初始化👏
在初步認識順序表這一結構后,我們就可以繼續深入探究
這是我之前在.h檔案中創建的結構體
typedef int type;
typedef struct list
{
type* a;
int size;
int capacity;
}st;
在處理順序表結構時我們會用到的一些介面,處理其中的關系,其實本質上就是函式,這里我用復雜英文對應出來方便形成記憶,
void init(st *s); //插入
void pushback( st* p, type x);//尾插
void popback(st* p); //尾刪
void pushfront( st* p, type x); //頭插
void popfront(st* p); //頭刪
void insert(st* p, int n, type x); //中間位置插入
void erase(st* p, int n); //中間位置刪處
我用 init 函式實作簡單的初始化,首先會先把結構體成員傳過來,注意再次強調區別形參和實參,傳值呼叫肯定會報錯滴,乖乖的換成指標,其實不論是不是傳址呼叫,我們都可以搞成指標傳過去,為了保險起見,
我們第一步肯定是開辟空間,先用 malloc 函式參上,當然,null 還玩個屁屁,為了先避免掉這種情況,我們就 if 意思一下,然后給初始有效位設為 0,初始容量設為 5,
void init(st *s)
{
s->a = (type*)malloc(sizeof(type) * 4);
if (s->a == NULL)
{
printf("申請記憶體失敗!\n");
exit(-1);
}
s->size = 0;
s-> capacity = 1;
}
尾插👏
然后就開始pushback 尾插操作:
void pushback(st* s, type x)
{
assert(s);//空指標判斷
s->a[s->size] = x;
s->size++;
}
還是老規矩,assert 斷言是否為空指標,再放行,往下就簡單的,把x的值放入陣列的size 位置上,讓 size ++即可,
但是 malloc 這種的指標是指向獨立不連續的空間,我們監視視窗觀察也只能看到一個個不連續的值,所以還是要老老實實搞一個列印函式,和陣列一樣,直接遍歷一下我們++過的size即可:
void print(st* s)
{
assert(s);
int i = 0;
for(i = 0; i < s->size; i++)
{
printf("%d ", s->a[i]);
}
}
結果如下:

格局打開👏
但是奇不奇怪,我 capacity 初始設定為 1,而我卻尾插了兩個數還沒有報錯,為什么捏?其實報錯了一定是你越界了,但沒有報錯不代表你就沒有越界,往往有些越界是檢查不出來的,因為還沒走到檢查的點上;就好比咱卷了不一定成功但不卷就一定不會成功,
所以我們的邏輯就要進行更替:
if (s->size >= s->capacity)
s->capacity++;
在assert 后加上 if 判斷句,讓容量隨有效位及時更新,但是又有一個問題,當我資料量非常大時,我們使用一位開辟一位的方法讓 capacity++ 非常頻繁,但一下子開辟一大片空間有會浪費資源,到后面已有資料越多開辟越大浪費的越多怎么辦呢?我們比較普遍的做法就是開辟 2 倍:
if (s->size == s->capacity)
{
s->capacity *= 2;
s->a = (type*)realloc(s->a, sizeof(type) * s->capacity);
}
這里敏感的朋友應該張口就來realloc,realloc函式會對已有空間直接擴容,但不一定是原地擴容,后面有足夠的空間就會原地擴容,但是不夠就會找一塊新的空間將資料拷貝過去再釋放掉原來空間,上面代碼將原來的空間給realloc,再增容到我要的空間,就能很好的滿足我們的要求,
尾刪👏
尾刪沒什么技術含量,和我們陣列的思路一樣
void popback(st* s)
{
assert(s);
s->size--;
}
結果如下:

以此類推,頭插頭刪是一個道理,不做贅述,
今天先到這里吧家人們,明天考四級,臨陣磨磨槍去,
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/385655.html
標籤:其他
上一篇:【手把手帶你刷好題】—— 62.數字三角形(遞推、簡單DP)
下一篇:【ASCII如何理解?】
