標頭檔案:es_seqlist.h
#ifndef es_seqlist_h
#define es_seqlist_h
#define es_seqlist_min_capacity 8 //線性表的初始容量
typedef void es_seqlist;
/** 函式描述:返回乙個空的線性表
* 輸入引數:
* 輸出引數:
* 返回值:成功則返回乙個指標
* 失敗返回 null
*/es_seqlist *es_seqlist_creat();
/** 函式描述:銷毀乙個線性表
* 輸入引數:es_seqlist *s 要銷毀的線性表
* 輸出引數:
* 返回值:
*/void es_seqlist_destory(es_seqlist *s);
/** 函式描述:獲取乙個線性表的長度
* 輸入引數:es_seqlist *s 線性表
* 輸出引數:
* 返回值:成功則返回線性表s的長度
* 返回-1表示引數為空指標
*/int es_seqlist_length(es_seqlist *s);
/** 函式描述:
* 輸入引數:
* 輸出引數:
* 返回值:成功則返回線性表s的容量
* 返回-1表示引數為空指標
*/int es_seqlist_capacity(es_seqlist *s);
/** 函式描述:在指定位置插入元素
* 輸入引數:es_seqlist *s 線性表
* int pos 插入位置
* 若pos太大插入線性表的尾部
* void *data 元素的位址
* 輸出引數:
* 返回值:成功則返回0
* 返回-1表示引數為空指標或pos<0
*/int es_seqlist_insert(es_seqlist *s, int pos, void *data);
/** 函式描述:獲取指定位置的元素
* 輸入引數:es_seqlist *s 線性表
* int pos 元素位置
* 輸出引數:
* 返回null表示失敗
*/void *es_seqlist_get(es_seqlist *s, int pos);
/** 函式描述:刪除指定位置的元素
* 輸入引數:es_seqlist *s 線性表
* int pos 元素位置
* 輸出引數:
* 返回null表示刪除失敗
*/void *es_seqlist_delete(es_seqlist *s, int pos);
#endif //es_seqlist_h
原始檔:es_seqlist.c
#include "es_seqlist.h"
#include #include typedef struct
_es_seqlist;
//建立並返回乙個空的線性表
es_seqlist *es_seqlist_creat()
//線性表初始化
s->capacity = es_seqlist_min_capacity; //容量為最小值
s->length = 0;
s->elements = malloc(sizeof(void **) * s->capacity);
if (s->elements == null) //申請記憶體失敗返回null
return s;
}//銷毀線性表
void es_seqlist_destory(es_seqlist *s)
//釋放記憶體
free(s->elements);
free(s);
}//線性表長度
int es_seqlist_length(es_seqlist *s)
return s->length;
}//線性表的容量
int es_seqlist_capacity(es_seqlist *s)
return s->capacity;
}int es_seqlist_insert(es_seqlist *s, int pos, void *data)
//若容量不足則申請更多的空間
if (s->length == s->capacity)
//pos大於線性表長度就把元素插在尾部
if (pos > s->length)
//把pos及之後的元素向後移動
int i;
for (i = s->length; i != pos; i--)
//把元素data插入
s->elements[i] = data;
s->length++;
return 0;
}//獲取元素
void *es_seqlist_get(es_seqlist *s, int pos)
return s->elements[pos];
}//刪除線性表指定位置的元素
void *es_seqlist_delete(es_seqlist *s, int pos)
//因為線性表只儲存元素的位址
//所以在要返回被刪除的元素的位址
void *ret = s->elements[pos];
//pos之後的元素想前移動
int i;
for (i = pos+1; i < s->length; i++)
s->length--;
return ret;
}
測試檔案:es_seqlist_test.c
#include "es_seqlist.h"
#include #include int main()
es_seqlist *list = es_seqlist_creat();
printf("length : %d\n", es_seqlist_length(list));
printf("capacity : %d\n", es_seqlist_capacity(list));
for (i = 0; i < 5; i++)
printf("length : %d\n", es_seqlist_length(list));
printf("capacity : %d\n", es_seqlist_capacity(list));
for (i = 0; i < 5; i++)
printf("length : %d\n", es_seqlist_length(list));
printf("capacity : %d\n", es_seqlist_capacity(list));
for (i = 0; i < 16; i++)
printf("\n");
for (i = 0; i < 3; i++)
printf("\n");
printf("length : %d\n", es_seqlist_length(list));
printf("capacity : %d\n", es_seqlist_capacity(list));
system("pause");
return 0;
}
SeqList 順序表的實現
順序表也就是我們常說的陣列,今天就是把對於陣列 的各種操作封裝成類,下面就來看具體的實現 我們先來看test.h的內容 ifndef test h define test h include include include using namespace std templateclass seql...
使用順序錶類SeqList求解約瑟夫環問題
約瑟夫環 約瑟夫問題 是乙個數學的應用問題 已知n個人 以編號1,2,3.n分別表示 圍坐在一張圓桌周圍。從編號為k的人開始報數,數到m的那個人出列 他的下乙個人又從1開始報數,數到m的那個人又出列 依此規律重複下去,直到圓桌周圍的人全部出列。順序錶類seqlist參考 約瑟夫環運作如下 1 一群人...
1 1線性表的順序表示與實現
線性表的順序儲存指的是將線性表中的元素存放在一組連續的儲存單元中,這樣使得在邏輯上是相鄰的,物理儲存上也是相鄰的。採用順序儲存結構的線性表稱為順序表。順序表反應了線性表中元素的邏輯關係,只要知道第乙個元素的儲存位址就能得到線性表中任何乙個元素的儲存位址。同樣已知任何乙個元素的儲存位址都可以得到其他元...