久久久久久久999_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.zg4o1577.cn/bbs/)
Powered by Discuz! X3.1
主站蜘蛛池模板:
国产免费一区二区
|
激情欧美日韩一区二区
|
亚洲久久
|
亚洲国产精品视频一区
|
亚洲欧美精品国产一级在线
|
国产伦精品一区二区
|
久久在线免费
|
国产成人免费在线
|
国产伦精品一区二区三区照片91
|
a级片网站
|
一本一道久久a久久精品综合
|
国产日韩一区二区三免费
|
亚洲自拍偷拍免费视频
|
成人永久免费视频
|
伊人伊人
|
国产精品精品视频一区二区三区
|
看亚洲a级一级毛片
|
在线观看视频中文字幕
|
国产在线精品一区二区三区
|
91视频麻豆
|
亚洲一区中文
|
国产在线精品一区二区
|
神马久久av
|
免费黄色在线
|
亚洲激情一区二区三区
|
久久精品99
|
中文字幕成人
|
羞羞网站在线观看
|
亚洲视频在线免费观看
|
国产精品伦一区二区三级视频
|
91精品国产综合久久久久久丝袜
|
欧美黑人狂野猛交老妇
|
午夜精品视频一区
|
欧美日韩久久久久
|
亚洲一一在线
|
久久不卡
|
午夜一区二区三区在线观看
|
天天影视亚洲综合网
|
成人在线精品视频
|
在线成人av
|
亚洲精品一区国语对白
|