資料結構 連續記憶體分配的實現

2021-08-18 22:49:55 字數 3067 閱讀 4607

資料結構儲存:

struct arr ;

資料結構操作:

void init_arr(struct arr *parr, int length);		//首先進行的是初始化陣列

int is_empty(struct arr *parr); //判斷陣列是否為空 return 0 1

int is_full(struct arr *parr); //判斷資料是否滿 這樣才能插入和刪除資料 return 0 1

void show_arr(struct arr *parr); //顯示資料

int insert_arr(struct arr *parr,int pos,int val); //在指定位置插入資料 pos從1開始 return 0 1

int delete_arr(struct arr *parr, int pos,int* pval);/*刪除pos的資料 並將資料返回到pval中 return 0 1 這裡並不能使用return返回刪除的值 如果刪除元素為0 會引起誤會*/

int get(struct arr *parr,int pos,int *pval); //獲得指定位置的數值

void sort_arr(struct arr *parr); //將陣列中的元素按照從小到大的順序排序

void inverse_arr(struct arr *parr); //陣列的反轉

具體**實現:

#include//標準輸入輸出函式

#include//使用 的是exit()函式

/** q:在這裡可以挖掘 標準的輸入輸出函式是怎樣實現的??

*/#include//系統級別的動態分配函式

/**定義:連續儲存 也就是系統分配一塊連續的記憶體空間 習慣上稱為陣列

*特點: 1.陣列元素相同 大小相等

* 2.具有連續的記憶體空間,且大小固定

*//*資料儲存方式

**連續的記憶體空間 有乙個指標 *pbase

*陣列大小固定 有乙個陣列總大小 len

* 有效元素的數量 cnt

*/struct arr ;

//資料的操作

void init_arr(struct arr *parr, int length); //首先進行的是初始化陣列

int is_empty(struct arr *parr); //判斷陣列是否為空 return 0 1

int is_full(struct arr *parr); //判斷資料是否滿 這樣才能插入和刪除資料 return 0 1

void show_arr(struct arr *parr); //顯示資料

int insert_arr(struct arr *parr,int pos,int val); //在指定位置插入資料 pos從1開始 return 0 1

int delete_arr(struct arr *parr, int pos,int* pval);/*刪除pos的資料 並將資料返回到pval中 return 0 1 這裡並不能使用return返回刪除的值 如果刪除元素為0 會引起誤會*/

int get(struct arr *parr,int pos,int *pval); //獲得指定位置的數值

void sort_arr(struct arr *parr); //將陣列中的元素按照從小到大的順序排序

void inverse_arr(struct arr *parr); //陣列的反轉

/**/

//主函式

int main()

void init_arr(struct arr *parr, int length)

memset(parr->pbase, 0, sizeof(int)*length);

parr->len = length;

parr->cnt = 0;

return;//****寫作習慣

}int is_empty(struct arr *parr)

int is_full(struct arr *parr)

else }

if (is_full(parr))

parr->pbase[parr->cnt] = val;

parr->cnt++;

return 1;

}void show_arr(struct arr *parr)

else

printf("\n");

} return 0;

}int insert_arr(struct arr *parr, int pos, int val)

if (pos < 1 || pos > parr->len)

for (int i = parr->cnt-1; i >= pos - 1; i--)

parr->pbase[pos - 1] = val;

parr->cnt++;

return 1;

}int delete_arr(struct arr *parr, int pos, int* pval)

if (pos < 1 || pos > parr->cnt)

*pval = parr->pbase[pos - 1];

if (pos == parr->len)

else

} parr->cnt--;

return 1;

}int get(struct arr *parr, int pos, int *pval)

if (pos < 1 || pos > parr->cnt)

pval = parr->pbase[pos - 1];

return 1;

}void sort_arr(struct arr *parr)

} if (i != k) }}

void inverse_arr(struct arr *parr)

}

uboot中的資料結構 記憶體分配

1.uboot中的資料結構 u boot的主要功能是用於引導os的,但是本身也提供許多強大的功能,可以通過輸入命令列來完成許多操作。所以它本身也是一 個很完備的系統。u boot的大部分操作都是圍繞它自身的資料結構,這些資料結構是通用的,但是不同的板子初始化這些資料就不一樣了。所以u boot的通用...

資料結構 記憶體分配中的堆和棧

棧後進先出。堆堆是一種經過排序的樹形資料結構,每個結點都有乙個值。通常我們所說的堆的資料結構,是指二叉堆。堆的特點是根結點的值最小 或最大 且根結點的兩個子樹也是乙個堆。由於堆的這個特性,常用來實現優先佇列,堆的訪問是隨意,直接取出我們想要的結點。記憶體中的棧區處於相對較高的位址以位址的增長方向為上...

資料結構 分配排序

基於分配和收集 先將資料分配到不同的桶中 再將桶中的資料收集到一起 桶式排序 單關鍵字排序 鏈式基數排序 多關鍵字排序 排序過程無須比較關鍵字,而是通過 分配 和 收集 過程來實現排序 它們的時間複雜度可達到線性階 o n 假設待排序的記錄的值在0 m 1之間 設定m個桶,依次掃瞄待排序的記錄,r ...