亚洲春色中文字幕久久久-三上亚,一吻二脱三床四吻胸,国产真实伦对白视频全集,在线毛片观看,精品成品入口黄网,国产毛aⅴ片久久久,亚洲AV色香蕉一区二区三区老师,萧皇后A级艳片,色情日本视频更新,99久久亚洲精品日本无码
標題:
C語言動態順序表源程序
[打印本頁]
作者:
老馬工作室
時間:
2019-4-1 17:42
標題:
C語言動態順序表源程序
最近在學習stm32的時候發現自己的c語言基礎還停留在c51的水平,因此做一些練習提高自己的c語言水平。
我參考了 《妙趣橫生的算法-c語言實現》這本書,建議大家從書 店入手
#include <stdio.h>
#include <mallco.h> // 使用malloc函數要包含這個文件
#include <assert.h>
#define INIT_CAPACITY 10 // 初始化時分配的容量
typedef struct seqlist{
int *array; // 存儲空間的基地址
int size; // 有效元素個數
int capacity; // 當前分配的存儲容量
}SEQLIST;
void seqlist_init(SEQLIST *list); //初始化順序表
void check_capacity(SEQLIST *list); // 檢查是否滿
void push_front(SEQLIST *list, int value); // 在順序表前頭部插入元素
void push_back(SEQLIST *list, int value); // 在順序表尾部插入元素
void insert_list(SEQLIST *list, int pos, int value); // 在pos這個位置插入元素
void pop_front(SEQLIST *list); // 刪除順序表第一個元素
void pop_back(SEQLIST *list); // 刪除順序表最后一個元素
void list_printf(SEQLIST *list); // 遍歷順序表
void destroy_list(SEQLIST *list); // 摧毀順序表
void list_cleardata(SEQLIST *list); // 清空順序表的數據
int main(void)
{
SEQLIST list;
seqlist_init(&list);
push_front(&list, 3);
push_front(&list, 2);
push_front(&list, 1);
// list_printf(&list);
push_back(&list, 3);
push_back(&list, 2);
push_back(&list, 1);
pop_back(&list);
pop_front(&list);
insert_list(&list, 3, 4);
list_printf(&list);
return 0;
}
// 初始化順序表
void seqlist_init(SEQLIST *list)
{
assert(list); // 斷言:判斷list是否為空
list->array = (int *)malloc(INIT_CAPACITY * sizeof(int)); // 分配一斷內存,容量為 INIT_CAPACITY個int的大小
assert(list->array); // 斷言:判斷aray是否為空
list->size = 0; // 沒有賦值之前有效元素個數為0
list->capacity = INIT_CAPACITY; // 容量
}
// 判斷順序表是否以滿,如果滿了,增加順序表的容量
void check_capacity(SEQLIST *list)
{
assert(list); // 判斷傳入的指針是否為空
if (list->size == list->capacity)
{
// 重新分配一塊內存,但是之前的數據不變
list->array = (int *)realloc(list->array, (2 * list->capacity * sizeof(int)));
assert(list); // 判斷是否分配成功
list->capacity *= 2; // 容量翻倍
}
}
// 在順序表前插入數據
void push_front(SEQLIST *list, int value)
{
int i;
assert(list); // 判斷傳入的是否為空
check_capacity(list); // 在執行插入之前先判斷順序表是否以滿,如果滿了,增加順序表的容量
// 將所有元素向后移動一位
for(i=list->size; i>=0; i--)
{
list->array[i] = list->array[i-1];
}
list->array[0] = value; // 將插入的值賦給第一個元素
list->size++; // 有效元素個數 +1
}
// 在順序表尾部插入數據
void push_back(SEQLIST *list, int value)
{
assert(list); // 判斷傳入的是否為空
check_capacity(list); // 在執行插入之前先判斷順序表是否以滿,如果滿了,增加順序表的容量
list->array[list->size] = value; // size記錄了當前有效元素的個數,而數組從0開始,array[list->size]處在順序表最后一個元素的位置+1
list->size++; // 插入后,有效元素個數+1
}
// 在順序表第pos個位置插入數據
void insert_list(SEQLIST *list, int pos, int value)
{
int i;
assert(list); // 判斷傳入的指針是否為空
if (pos > list->size+1 && pos < 0)
{
printf("非法操作!!\n");
return;
}
// 將第pos個位置之后的數據往后移動一位
for (i=list->size; i>=pos; i--)
{
list->array[i] = list->array[i-1];
}
list->array[pos-1] = value;
list->size++;
}
// 刪除頭部數據
void pop_front(SEQLIST *list)
{
int i = 0;
assert(list); // 判斷傳入的是否為空
if (list->size == 1)
{
list->size = 0;
}
else
{
for (i=0; i<list->size; i++)
{
// 將后面的賦值給前面的,第0個元素的數據就不管了(第0個數據被覆蓋)
// 第1個元素的數據給第0個數據 第2個元素的數據給第1個數據 ...
list->array[i] = list->array[i+1];
}
}
list->size--; // 有效數據的個數減1
}
// 尾部插入
void pop_back(SEQLIST *list)
{
assert(list);
if (list->size == 0)
{
return;
}
else
{
list->size--;
}
}
// 遍歷數組,并打印
void list_printf(SEQLIST *list)
{
int i;
for (i=0; i<list->size; i++)
{
printf("%d \n", list->array[i]);
}
}
// 摧毀順序表
void destroy_list(SEQLIST *list)
{
free(list->array);
list->size = 0;
list->capacity = 0;
}
// 清空順序表的數據
void list_cleardata(SEQLIST *list)
{
list->size = 0;
}
復制代碼
作者:
Mr丶朋
時間:
2019-4-2 12:13
厲害厲害,有點意思
作者:
wis98
時間:
2019-8-29 11:04
厲害厲害,有點意思
作者:
wpppmlah
時間:
2019-8-30 16:24
提高一下自己 ,學習前輩的經驗.謝謝.
歡迎光臨 (http://www.denmoz.com/bbs/)
Powered by Discuz! X3.1