動態順序表c語言實現

2021-08-18 16:26:10 字數 2444 閱讀 6474

主要操作結構體中的指標,在init函式裡對指標進行記憶體開闢,checkcapacity函式在每次插入之前檢查一遍,如果可用空間沒有了,就開闢當前最大容量的兩倍。其他操作與靜態順序表無大區別。

seqlist.h

#pragma once

#define datatype int

typedef struct seqlist *pseqlistd, seqlistd;

void seqlistdinit(pseqlistd ps, int capacity);

void seqlistdpushback(pseqlistd ps, datatype data);

void seqlistdpopback(pseqlistd ps);

void seqlistdinsert(pseqlistd ps, int pos, datatype data);

void seqlistderase(pseqlistd ps, int pos);

// 獲取元素個數

int seqlistdsize(pseqlistd ps);

// 獲取順序表的容量

int seqlistdcapacity(pseqlistd ps);

int seqlistdempty(pseqlistd ps);

// 將順序表中的元素清空 注意:不改變順序表空間的大小

void seqlistdclear(pseqlistd ps);

void seqlistddestroy(pseqlistd * ps);

// 對順序表進行增容

int checkcapacity(pseqlistd ps);

test.c

#include "seqlistd.h"

int main()

seqlist.c

#include "seqlistd.h"

#include

#include

void seqlistdinit(pseqlistd ps, int capacity)

ps->size = 0;

ps->capicity = capacity;

ps->array = (datatype*)malloc(sizeof(datatype) * capacity);

if (ps->array == null)

}void seqlistddestroy(pseqlistd ps)

free(ps->array);

ps->array = null;

}void seqlistdpushback(pseqlistd ps, datatype data)

if (checkcapacity(ps))

}void seqlistdpopback(pseqlistd ps)

if (ps->size == 0)

ps->size--;

}void seqlistdinsert(pseqlistd ps, int pos, datatype data)

if (checkcapacity(ps))

ps->array[pos] = data;

ps->size++;

}}void seqlistderase(pseqlistd ps, int pos)

if (ps->size == 0)

int i = 0;

for (i = pos; i < ps->size - 1; i++)

ps->size--;

}// 對順序表進行增容

int checkcapacity(pseqlistd ps)

//防止新空間開闢失敗舊空間丟失的情況

if (ps->size == ps->capicity)

ps->array = newbase;

ps->capicity *= 2;

}return1;}

// 獲取元素個數

int seqlistdsize(pseqlistd ps)

return ps->size;

}// 獲取順序表的容量

int seqlistdcapacity(pseqlistd ps)

return ps->capicity;

}int seqlistdempty(pseqlistd ps)

return ps->size ? 1 : 0;

}// 將順序表中的元素清空 注意:不改變順序表空間的大小

void seqlistdclear(pseqlistd ps)

ps->size = 0;

}

C語言實現動態順序表

include include include include ifndef list h define list h define default 3 初始化開闢容量大小 define int sz 2 每次固定增容大小 typedef int datatype typedef struct se...

C語言實現動態順序表

關鍵知識點 動態順序表的儲存是以動態陣列的方式,它比之靜態順序表,在空間的開闢上,更加的靈活。避免了靜態順序表的定長陣列儲存方式而導致空間開闢小了不夠用,開闢大了造成記憶體浪費的特點。根據實際需要,自己掌控對記憶體空間大小的分配。因而動態順序表在實際應用中更加廣泛。對順序表的主要操作 初始化順序表 ...

C語言實現順序表

標頭檔案部分 include include include typedef int datatype define maxsize 10 typedef struct seqlist seqlist 列印順序表的內容 void printseqlist seqlist seq 初始化順序表 voi...