- 前言
- 1.SeqListMain.c
- 2.SeqList.h
- 3.SeqList.c
- 效果
- 看完给个关注,多谢了!!!
前言
这是我由C语言写的顺序表,希望对大家有帮助。
1.SeqListMain.c
#include "SeqList.h" // 测试1 void SLTest1() { SL sl; SL* ps = &sl; SLInit(ps); SLPushBack(ps, 1); SLPushBack(ps, 1); SLPushBack(ps, 1); SLPushBack(ps, 1); SLPushFront(ps, 2); SLPushFront(ps, 3); SLPushFront(ps, 3); SLPopBack(ps); SLPopBack(ps); SLPopBack(ps); SLPopBack(ps); SLPopBack(ps); SLPrint(ps); SLDestroy(ps); } // 测试2 void SLTest2() { SL sl; SL* ps = &sl; SLInit(ps); SLPushFront(ps, 1); SLPushFront(ps, 1); SLPushFront(ps, 1); SLPushFront(ps, 1); SLPushFront(ps, 2); SLPushFront(ps, 3); SLPrint(ps); SLPopFront(ps); SLPrint(ps); SLDestroy(ps); } // 测试3 void SLTest3() { SL sl; SL* ps = &sl; SLInit(ps); SLPushFront(ps, 1); SLPrint(ps); int i = SLFind(ps,1); printf("%dn", i); printf("%dn", sl.sl[i]); i = SLFind(ps, 1); printf("%dn", i); SLDestroy(ps); } // 测试4 void SLTest4() { SL sl; SL* ps = &sl; SLInit(ps); SLPushBack(ps, 1); SLPushBack(ps, 1); SLPushBack(ps, 1); SLPrint(ps); SLInsert(ps, 3, 3); SLPrint(ps); SLErase(ps, 2); SLPrint(ps); SLDestroy(ps); } // 测试5 void SLTest5() { SL sl; SL* ps = &sl; SLInit(ps); SLDestroy(ps); SLPushBack(ps, 1); SLPrint(ps); SLDestroy(ps); } // 测试6 void SLTest6() { SL sl; SL* ps = &sl; SLInit(ps); SLPushBack(ps, 1); SLPrint(ps); SLModify(ps, 0, 2); SLPrint(ps); SLDestroy(ps); } // 主函数 int main(void) { printf("SLTest1:n"); SLTest1(); printf("SLTest2:n"); SLTest2(); printf("SLTest3:n"); SLTest3(); printf("SLTest4:n"); SLTest4(); printf("SLTest5:n"); SLTest5(); printf("SLTest6:n"); SLTest6(); return 0; }
2.SeqList.h
#pragma once #define _CRT_SECURE_NO_WARNINGS 1 //_CRT_SECURE_NO_WARNINGS // 头文件的引用 #include#include #include #include // 顺序表中的类型 typedef int SLDateType; // 顺序表的结构体 typedef struct SeqList { SLDateType* sl; size_t size; size_t capacity; }SL; // 对数据的管理: // 初始化顺序表 void SLInit(SL* ps); // 删除所有数据 void SLDestroy(SL* ps); // 打印所有数据 void SLPrint(const SL* ps); // 顺序表的最后处增加 void SLPushBack(SL* ps, SLDateType x); // 顺序表的最前处增加 void SLPushFront(SL* ps, SLDateType x); // 顺序表的最前处删除 void SLPopFront(SL* ps); // 顺序表的最后处删除 void SLPopBack(SL* ps); // 顺序表查找数据 int SLFind(SL* ps, SLDateType x); // 顺序表在pos位置插入x void SLInsert(SL* ps, size_t pos, SLDateType x); // 顺序表删除pos位置的值 void SLErase(SL* ps, size_t pos); //顺序表修改pos位置的值 void SLModify(SL* ps, size_t pos, SLDateType x);
3.SeqList.c
#include "SeqList.h" //检查顺序表容量 static int SLCheckCapactiy(SL* ps) { if (ps->size == ps->capacity) { size_t tmp_capacity = ps->capacity == 0 ? 4 : ps->capacity * 2; SLDateType* ptmp_sl = (SLDateType*)realloc(ps->sl, sizeof(SLDateType) * tmp_capacity); if (ptmp_sl) { ps->sl = ptmp_sl; ps->capacity = tmp_capacity; return 0; } else { perror("SLCheck"); return 1; } } return 0; } // 初始化顺序表 void SLInit(SL* ps) { assert(ps); ps->sl = NULL; ps->capacity = ps->size = 0; } // 删除所有数据 void SLDestroy(SL* ps) { assert(ps); if (ps->sl) { free(ps->sl); ps->sl = NULL; ps->capacity = ps->size = 0; } } // 打印所有数据 void SLPrint(const SL* ps) { assert(ps); size_t i; for (i = 0;i < ps->size; i++) printf("%d ", ps->sl[i]); printf("n"); } // 顺序表的最后处增加 void SLPushBack(SL* ps, SLDateType x) { assert(ps); if (SLCheckCapactiy(ps)) { return; } ps->sl[ps->size] = x; ps->size++; } // 顺序表的最前处增加 void SLPushFront(SL* ps, SLDateType x) { assert(ps); if (SLCheckCapactiy(ps)) { return; } size_t i = ++ps->size; while (i) { ps->sl[i] = ps->sl[i - 1]; i--; } ps->sl[0] = x; } // 顺序表的最前处删除 void SLPopFront(SL* ps) { assert(ps); SLErase(ps, 0); } // 顺序表的最后处删除 void SLPopBack(SL* ps) { assert(ps); SLErase(ps, ps->size - 1); } // 顺序表查找数据 int SLFind(SL* ps, SLDateType x) { size_t i; for (i = 0;i < ps->size; i++) if (ps->sl[i] == x) return i; return -1; } // 顺序表在pos位置插入x void SLInsert(SL* ps, size_t pos, SLDateType x) { assert(ps); assert(pos <= ps->size); if (SLCheckCapactiy(ps)) { return; } size_t end = ps->size++; while (pos < end) { ps->sl[end] = ps->sl[end - 1]; end--; } ps->sl[pos] = x; } // 顺序表删除pos位置的值 void SLErase(SL* ps, size_t pos) { assert(ps); assert(pos <= ps->size); size_t end = --ps->size; while (pos < end) { ps->sl[pos] = ps->sl[pos + 1]; pos++; } } //顺序表修改pos位置的值 void SLModify(SL* ps, size_t pos, SLDateType x) { assert(ps); assert(pos <= ps->size); ps->sl[pos] = x; }
效果
看完给个关注,多谢了!!!