• 考研顺序表的初始化、销毁、打印、封装、增删改查代码看这一篇就够了


    目录

    题目 

    头文件:

    SeqList.c 文件

     销毁函数

     封装函数,动态扩容

    尾插法 

     打印函数

     头插法

     尾删法

    头删法

    指定位置插入

    指定下标位置删除 

    按值查找下标 

    Test.c测试类


    题目 

    // SeqList.h
    #pragma once
    #include 
    #include 
    #include 
    
    typedef int SLDateType;
    typedef struct SeqList
    {
    	SLDateType* a;
    	int size;
    	int capacity;
    }SeqList;
    
    // 对数据的管理:增删查改 
    void SeqListInit(SeqList* ps);
    void SeqListDestroy(SeqList* ps);
    
    void SeqListPrint(SeqList* ps);
    void SeqListPushBack(SeqList* ps, SLDateType x);
    void SeqListPushFront(SeqList* ps, SLDateType x);
    void SeqListPopFront(SeqList* ps);
    void SeqListPopBack(SeqList* ps);
    
    // 顺序表查找
    int SeqListFind(SeqList* ps, SLDateType x);
    // 顺序表在pos位置插入x
    void SeqListInsert(SeqList* ps, int pos, SLDateType x);
    // 顺序表删除pos位置的值
    void SeqListErase(SeqList* ps, int pos);

    头文件:

    1. #define _CRT_SECURE_NO_WARNINGS
    2. #include
    3. #include
    4. typedef int SLDataType;
    5. typedef struct SeqList {
    6. SLDataType* a;
    7. int size;
    8. int capacity;
    9. }SL;
    10. void SLInit(SL* psl);
    11. void SLDestory(SL* psl);
    12. void SLPrint(SL* psl);
    13. void SLPushBack(SL* psl, SLDataType x);
    14. void SLCheckCapacity(SL* psl);
    15. void SLPushFront(SL* psl, SLDataType x);
    16. void SLPopBack(SL* psl);
    17. void SLInsert(SL* psl, int pos, SLDataType x);
    18. void SLErase(SL* psl, int pos);
    19. int SLFind(SL* psl, SLDataType x);

    SeqList.c 文件

    1. #define _CRT_SECURE_NO_WARNINGS
    2. #include"SeqList.h"
    3. #include"assert.h"
    4. //初始化
    5. void SLInit(SL* psl) {
    6. psl->a = NULL;
    7. psl->size = 0;
    8. psl->capacity = 0;
    9. }

     销毁函数

    1. //销毁
    2. void SLDestory(SL* psl) {
    3. if (psl->a != NULL) {
    4. free(psl->a);
    5. psl->a = 0;
    6. psl->size = 0;
    7. psl->capacity = 0;
    8. }
    9. }

     封装函数,动态扩容

    1.先判满了,是否有效个数等于空间总数,如果等于判空间是否为空

    2.空了的话,先给capacity赋初值为4,不为空则给空间动态扩容两倍

    1. //封装函数
    2. void SLCheckCapacity(SL* psl) {
    3. assert(psl);
    4. if (psl->size == psl->capacity) { //当空间满了,即数据个数等于容量
    5. int newcapacity = psl->capacity == 0 ? 4 : psl->capacity * 2;//当容量为0的时候扩容也为0,所以当capacity==0时给他赋初值4个空间,不为0扩容两倍
    6. SLDataType* tmp = (SLDataType*)realloc(psl->a, sizeof(SLDataType) * newcapacity);
    7. if (tmp == NULL) { //如果扩容失败返回realloc fail
    8. perror("realloc fail");
    9. return 0;
    10. }
    11. psl->a = tmp; //用tmp接收的原因是,如果ralloc开辟失败,用psl->a接收会导致原始地址丢失
    12. psl->capacity = newcapacity;
    13. }
    14. }

    尾插法 

    1. //尾插
    2. void SLPushBack(SL* psl,SLDataType x){
    3. assert(psl);
    4. SLCheckCapacity(psl);
    5. psl->a[psl->size] = x;
    6. psl->size++;
    7. }

     

     打印函数

    for循环遍历一遍数组,并打印

    1. //打印
    2. void SLPrint(SL* psl) {
    3. for (int i = 0; i < psl->size; i++) {
    4. printf("%d ", psl->a[i]);
    5. }
    6. printf("\n");
    7. }

     头插法

    1. //头插
    2. void SLPushFront(SL* psl, SLDataType x) {
    3. assert(psl);
    4. SLCheckCapacity(psl);
    5. int end = psl->size - 1;
    6. while (end >= 0) {
    7. psl->a[end + 1] = psl->a[end];
    8. --end;
    9. }
    10. psl->a[0] = x;
    11. psl->size++;
    12. }

     尾删法

    1. //尾删
    2. void SLPopBack(SL* psl) {
    3. assert(psl);
    4. /*if (psl->size == 0) {
    5. return;
    6. }*/
    7. assert(psl->size> 0);
    8. psl->size--;
    9. }

     

    头删法

     

    1. //头删法
    2. void SLPopFront(SL* psl) {
    3. assert(psl);
    4. int begin = 0;
    5. while (begin <= psl->size - 1) {
    6. psl->a[begin] = psl->a[begin+1];
    7. ++begin;
    8. }
    9. psl->size--;
    10. }

    指定位置插入

    1. //指定下标位置插入
    2. void SLInsert(SL* psl, int pos, SLDataType x) {
    3. assert(psl);
    4. assert(pos >= 0 && pos <= psl->size);
    5. SLCheckCapacity(psl);
    6. int end = psl->size - 1;
    7. while (end >= pos) {
    8. psl->a[end + 1] = psl->a[end];
    9. --end;
    10. }
    11. psl->a[pos] = x;
    12. psl->size++;
    13. }

     

    指定下标位置删除 

    1. void SLErase(SL* psl, int pos) {
    2. assert(psl);
    3. assert(pos>=0&&possize);
    4. int begin = pos + 1;
    5. while (begin < psl->size) {
    6. psl->a[begin - 1] = psl->a[begin];
    7. ++begin;
    8. }
    9. psl->size--;
    10. }

     

    按值查找下标 

    用for循环遍历一遍,如果i的值等于x则返回下标i;

    1. //按值查找下标
    2. int SLFind(SL* psl, SLDataType x) {
    3. assert(psl);
    4. for (int i = 0; i <= psl->size - 1; i++) {
    5. if (psl->a[i] == x) {
    6. return i;
    7. }
    8. }
    9. return -1;
    10. }

    Test.c测试类

    1. #define _CRT_SECURE_NO_WARNINGS
    2. #include
    3. #include"SeqList.h"
    4. void TestL1() {
    5. SL sl; //SL是结构体名,sl是创建一个类,用来测试
    6. SLInit(&sl);
    7. SLPushBack(&sl, 1); //插入数据
    8. SLPushBack(&sl, 2);
    9. SLPushBack(&sl, 3);
    10. SLPushBack(&sl, 4);
    11. SLPushBack(&sl, 5);
    12. SLPushBack(&sl, 6);
    13. SLPushBack(&sl, 7);
    14. SLPushBack(&sl, 8);
    15. SLPushBack(&sl, 9);
    16. SLPrint(&sl);
    17. SLPushFront(&sl, 10);
    18. SLPushFront(&sl, 20);
    19. SLPushFront(&sl, 30);
    20. SLPushFront(&sl, 40);
    21. SLPrint(&sl);
    22. SLPopBack(&sl);
    23. SLPopBack(&sl);
    24. SLPopBack(&sl);
    25. SLPopBack(&sl);
    26. SLPrint(&sl);
    27. SLDestory(&sl);
    28. }
    29. void TestL2() {
    30. SL sl; //SL是结构体名,sl是创建一个类,用来测试
    31. SLInit(&sl);
    32. SLPushBack(&sl, 1); //插入数据
    33. SLPushBack(&sl, 2);
    34. SLPushBack(&sl, 3);
    35. SLPushBack(&sl, 4);
    36. SLPushBack(&sl, 5);
    37. SLPushBack(&sl, 6);
    38. SLPushBack(&sl, 7);
    39. SLPushBack(&sl, 8);
    40. SLPushBack(&sl, 9);
    41. SLPrint(&sl);
    42. SLInsert(&sl, 2, 10);
    43. SLPrint(&sl);
    44. SLErase(&sl, 3);
    45. SLPrint(&sl);
    46. SLFind(&sl, 4);
    47. SLPrint(&sl);
    48. }
    49. int main() {
    50. TestL2();
    51. }

     

  • 相关阅读:
    深入理解requests库和使用方法
    SEO 笔记 10,网址覆盖率问题之网页会自动重定向
    golang面试题:json包变量不加tag会怎么样?
    鼠标右键助手专业版 MouseBoost PRO for Mac v3.3.6中文破解
    基于Python实现一个庆祝中秋节的小程序
    Db2 license
    代码随想录 Day40 动态规划08 LeetCodeT198打家劫舍 T213打家劫舍II T337 打家劫舍III
    基于JavaSwing开发学生成绩管理系统(SQLServer数据库) 课程设计 大作业
    SpringBoot如何优雅关闭(SpringBoot2.3&Spring Boot2.2)
    十月四日作业
  • 原文地址:https://blog.csdn.net/qq_62830324/article/details/134276558