typedefine:函式執行的時候,進行符號的轉換。
define:只做簡單的替換,預處理
區別:預處理:展開檔案,對預處理的命令替換。
如何定義乙個函式指標:先定義指標,*p,括號起來。再在
順序表的書寫思路:首先,建立目錄,進入目錄,建立三個資料夾,乙個.c檔案,乙個main.c檔案,乙個.h檔案。
在這個.h檔案中,需要寫標頭檔案。結尾加#endif。
一般在.h檔案中:
需要定義乙個結構體,
#ifndefsqlist_h
#definesqlist_h
typedef struct sqlist_s
sqlist_t;
#define success 0 用來判斷對錯
#define failed -1 用來判斷對錯
再定義函式,
int sqlist_head_add(sqlist_t *sqlist,int data); 頭插
int sqlist_tail_add(sqlist_t *sqlist,int data); 尾插
int sqlist_insert(sqlist_t *sqlist,int data,int pos);
int sqlist_del_data(sqlist_t *sqlist,int data); 刪除資料
int sqlist_del_position(sqlist_t *sqlist,int pos); 刪除位置
int sqlist_get_data_pos(sqlist_t *sqlist,int data); 獲取制定位置的資料。
int sqlist_get_pos_data(sqlist_t *sqlist,int pos); 獲取制定的資料位置
int sqlist_reserve(sqlist_t *sqlist); 逆序
int sqlist_merge(sqlist_t *new_sqlist,sqlist_t sqlist1,sqlist_t sqlist2); 合併
void sqlist_display(sqlist_t sqlist); 遍歷
int sqlist_init(sqlist_t *sqlist); 分配
int sqlist_destroy(sqlist_t *sqlist); 損毀
其次在.c檔案中:包含四個標頭檔案,然後寫每個函式功能。
#include
#include
#include
#include 「sqlist.h」
void sqlist_display(sqlist_t sqlist)
printf("******************************\n");
}int sqlist_increase(sqlist_t *sqlist)
memset(ptr+(sqlist->size * sizeof(int)),0,increase_size * sizeof(int));
sqlist->data = ptr;
sqlist->size += increase_size;
return success;
int sqlist_init(sqlist_t *sqlist)
sqlist->cur_len = 0;
sqlist->size = init_size;
sqlist->data = (int *)malloc(init_size * sizeof(int));
if(sqlist->data == null)
memset(sqlist->data,0,sizeof(int) * init_size);
return success;
int sqlist_destroy(sqlist_t *sqlist)
if(sqlist->data == null)
free(sqlist->data);
sqlist->data = null;
return success;
int sqlist_tail_add(sqlist_t *sqlist,int data)
if(sqlist->cur_len >= sqlist->size)
}sqlist->data[sqlist->cur_len] = data;
sqlist->cur_len++;
return success;
int sqlist_head_add(sqlist_t *sqlist,int data)
if(sqlist->cur_len >= sqlist->size)
}for(i = sqlist->cur_len;i>0;i--)
sqlist->data[0] = data;
sqlist->cur_len++;
return success;
int sqlist_insert(sqlist_t *sqlist,int data,int pos)
if(pos < 1 || pos > sqlist->cur_len)
if(sqlist->cur_len >= sqlist->size)
}for(i = sqlist->cur_len;i>=pos;i--)
sqlist->data[pos - 1] = data;
sqlist->cur_len++;
return success;int sqlist_del_position(sqlist_t *sqlist,int pos)
if(pos < 1 || pos > sqlist->cur_len)
for(i = pos;i < sqlist->cur_len;i++)
sqlist->cur_len--;
return success;int sqlist_del_data(sqlist_t *sqlist,int data)
for(i = 0;i < sqlist->cur_len;i++)
return success; }}
return failed;int sqlist_get_data_pos(sqlist_t *sqlist,int data)
for(i = 0;i < sqlist->cur_len;i++)
return failed;
int sqlist_get_pos_data(sqlist_t *sqlist,int pos)
if(pos < 1 || pos > sqlist->cur_len)
return sqlist->data[pos-1];
int sqlist_reserve(sqlist_t *sqlist)
for(i = sqlist->cur_len;i > sqlist->cur_len / 2;i--)
return success;int sqlist_merge(sqlist_t *new_sqlist,sqlist_t sqlist1,sqlist_t sqlist2)
new_sqlist->cur_len = 0;
new_sqlist->size = sqlist1.cur_len + sqlist2.cur_len;
new_sqlist->data = (int *)malloc(sizeof(int) * new_sqlist->size);
if(new_sqlist->data == null)
memset(new_sqlist->data,0,sizeof(int) * new_sqlist->size);
for(i = 0;i < sqlist1.cur_len;i++)
for(i = 0;i < sqlist2.cur_len;i++)
return success;
}
在這個main.c檔案中: 包含兩個標頭檔案,乙個主函式,注意,寫主函式需要定義乙個返回變數,再定義引數。
#include
#include 「sqlist.h」
int main()
for(i = 0; i < 5;i++)
}printf("**********==sqlist1**********==\n");
sqlist_display(sqlist1);
ret = sqlist_init(&sqlist2);
if(ret == failed)
for(i = 5; i < 10;i++)
}printf("**********==sqlist2**********==\n");
sqlist_display(sqlist2);
順序表的功能實現
順序表的建立,插入,刪除,清空,銷毀,查詢,輸出功能 include include include definetrue 1 definefalse 0 defineok 1 defineerror 0 defineinfeasible 1 defineoverflow 2 typedefint ...
實現順序表以及順序表的簡單運算
自定義標頭檔案 my list.h define crt secure no warnings ifndef my list h define my list h 檔案功能 實現線性表的基本運算 1 順序表的插入預算 2 順序表中元素的逆序 3 順序表的刪除運算 define max size 10...
動態順序表的功能實現
在了解線性結構後我們知道它可分為順序表和煉表兩種,而順序表又分為靜態順序表 和動態順序表.靜態順序表和靜態通訊錄的實現極為相似,但是我們知道靜態版本有著明顯的缺陷,空間分配太大易造成浪費,太小又不便儲存,而動態版本正好可以解決這個問題。既然前面提到線性結構的組成,那麼我們就在說說鍊錶分為哪些 它可分...