数据结构顺序变的完整代码复习

简介: 引言:1.头文件:2.接口的实现:3.接口测试文件:4.具体功能实现:

1.头文件:

#pragma once
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
typedef int SLDataType;
typedef struct SeqList
{
  SLDataType* arr;
  int size;
  int capacity;
}SL;
void SeqListInit(SL* ps);
void SeqListCheckCapacity(SL* ps);
void SeqListDestroy(SL* ps);
void SeqListPushBack(SL* ps, SLDataType x);
void SeqListPoptBack(SL* ps, SLDataType x);
void SeqListPushFront(SL* ps, SLDataType x);
void SeqListPoptFront(SL* ps, SLDataType x);
void SeqListPrint(SL* ps);
int  SeqListFind(SL* ps, SLDataType x);
void SepListInsert(SL* ps, int pos, SLDataType x);
void SepListDele(SL* ps, int pos);

2.接口的实现:

#include"testSL.h"
void SeqListInit(SL* ps)
{
  ps->arr = NULL;
  ps->size = 0;
  ps->capacity = 0;
}
void SeqListCheckCapacity(SL* ps)
{
  if (ps->size == ps->capacity)
  {
    int newcapacity = ps->capacity == 0 ? 4 : ps->capacity * 2;
    SLDataType* tmp = (SLDataType*)realloc(ps->arr, newcapacity * sizeof(SLDataType));
    if (tmp == NULL)
    {
      printf("realloc flie\n");
      exit(-1);
    }
    else
    {
      ps->arr = tmp;
      ps->capacity = newcapacity;
      printf("增容成功\n");
    }
  }
}
void SeqListPushBack(SL* ps, SLDataType x)
{
  SeqListCheckCapacity(ps);
  ps->arr[ps->size] = x;
  ps->size++;
}
void SeqListPoptBack(SL* ps, SLDataType x)
{
  SeqListCheckCapacity(ps);
  ps->size--;
}
void SeqListDestroy(SL* ps)
{
  free(ps->arr);
  ps->arr = NULL;
}
void SeqListPrint(SL* ps)
{
  int i;
  for (i = 0; i < ps->size; i++)
  {
    printf("%d ", ps->arr[i]);
  }
  printf("\n");
}
void SeqListPushFront(SL* ps, SLDataType x)
{
  int i;
  int end = ps->size - 1;
  for (i = 0; i < ps->size; i++)
  {
    ps->arr[end + 1 - i] = ps->arr[end - i];
  }
  ps->arr[0] = x;
  ps->size++;
}
void SeqListPoptFront(SL* ps, SLDataType x)
{
  int i;
  int begin = 1;
  for (i = 0; i < ps->size; i++)
  {
    ps->arr[begin - 1 + i] = ps->arr[begin + i];
  }
  ps->size--;
}
int SeqListFind(SL* ps, SLDataType x)
{
  int i;
  for (i = 0; i < ps->size; i++)
  {
    if (x == ps->arr[i])
    {
      return i;
    }
    else if (i == ps->size - 1)
    {
      printf("找不到\n");
      return -1;
    }
  }
}
void SeqListInsert(SL* ps, int pos, SLDataType x)
{
  SeqListCheckCapacity(ps);
  if (pos > ps->size || pos < 0)
  {
    printf("pos invalid\n");
    return;
  }
  else
  {
    int i;
    int end = ps->size - 1;
    for (i = 0; i <= ps->size - pos; i++)
    {
      ps->arr[end + 1 - i] = ps->arr[end - i];
    }
    ps->arr[pos] = x;
    ps->size++;
  }
}
void SeqListDele(SL* ps, int pos)
{
  if (pos<0 || pos>ps->size)
  {
    printf("pod invalid\n");
    return;
  }
  else
  {
    int i;
    int begin = pos;
    for (i = 0; i < ps->size - pos; i++)
    {
      ps->arr[begin + i] = ps->arr[begin + 1 + i];
    }
    ps->size--;
  }
}

3.接口测试文件:

#include"testSL.h"
void Test()
{
  SL s;
  int n;
  SeqListInit(&s);
  SeqListPushBack(&s, 1);
  SeqListPushBack(&s, 2);
  SeqListPushBack(&s, 3);
  SeqListPushBack(&s, 4);
  SeqListPushBack(&s, 5);
  SeqListPushBack(&s, 6);
  SeqListPushBack(&s, 7);
  SeqListPushBack(&s, 8);
  SeqListPushBack(&s, 9);
  SeqListPushBack(&s, 10);
  SeqListPoptBack(&s, 10);
  SeqListPoptBack(&s, 9);
  SeqListPoptBack(&s, 8);
  SeqListPushFront(&s, 8);
  SeqListPushFront(&s, 9);
  SeqListPushFront(&s, 10);
  SeqListPoptFront(&s, 10);
  SeqListPoptFront(&s, 9);
  SeqListPoptFront(&s, 8);
  SeqListInsert(&s, 2, 20);
  SeqListInsert(&s, 3, 30);
  SeqListInsert(&s, 4, 40);
    SeqListFind(&s, 20);
    SeqListFind(&s, 30);
    SeqListFind(&s, 40);
    SeqListDele(&s, 40);
    SeqListDele(&s, 30);
    SeqListDele(&s, 20);
  SeqListPrint(&s);
  SeqListDestroy(&s);
}
int main()
{
  Test();
  return 0;
}

4.具体功能实现:

  printf("请输入你想要删除的数:");
  scanf("%d",&n);
  int pos = SeqListFind(&s, n);
  {
    char ch[10] = { 0 };
    if (pos != -1)
    {
      printf("找到了,你要删除的数的下标是:%d\n", pos);
      printf("请问是否需要删除(是/否):");
      scanf("%s",&ch);
      if (0 == strcmp("是", ch))
      {
        SeqListDele(&s, pos);
        printf("删除成功\n");
      }
      else
      {
        printf("删除失败\n");
      }
    }
  }
相关文章
|
1月前
|
算法 安全 大数据
揭秘!Python堆与优先队列:数据结构的秘密武器,让你的代码秒变高效战士!
【7月更文挑战第8天】Python的heapq模块和queue.PriorityQueue提供堆与优先队列功能,助你提升算法效率。堆用于快速找大数据集的第K大元素,如示例所示,时间复杂度O(n log k)。PriorityQueue在多线程中智能调度任务,如模拟下载管理器,按优先级处理任务。掌握这些工具,让代码运行更高效!
49 1
|
1月前
|
算法 计算机视觉 开发者
燃爆全场!Python并查集:数据结构界的网红,让你的代码炫酷无比!
【7月更文挑战第16天】并查集,Python中的效率明星,处理不相交集合合并与查询。用于社交网络分析、图像处理、图论算法等领域。优雅实现结合路径压缩和按秩合并
22 1
|
2月前
数据结构学习记录——堆的建立(最大堆的建立、思路图解、代码实现、代码解释)
数据结构学习记录——堆的建立(最大堆的建立、思路图解、代码实现、代码解释)
23 1
数据结构学习记录——堆的建立(最大堆的建立、思路图解、代码实现、代码解释)
|
2月前
|
存储 算法
【单向链表】数据结构——单向链表的介绍与代码实现&笔记
【单向链表】数据结构——单向链表的介绍与代码实现&笔记
|
2月前
|
搜索推荐 算法
【排序】数据结构——排序算法概念及代码详解(插入、冒泡、快速、希尔)
【排序】数据结构——排序算法概念及代码详解(插入、冒泡、快速、希尔)
|
1月前
|
存储 算法 安全
解锁Python高级数据结构新姿势:堆与优先队列的实战演练,让你的代码更优雅!
【7月更文挑战第8天】Python的`heapq`模块和`queue.PriorityQueue`提供堆与优先队列功能,用于高效数据管理。堆是完全二叉树,`heapq`实现最小堆,常用于任务调度,如按优先级执行任务。当需要线程安全且更复杂操作时,`queue.PriorityQueue`成为优选,例如在管理网络请求时按优先级处理。这两个数据结构能提升代码效率和可读性。
24 0
|
2月前
数据结构学习记录——堆的删除(思路图解、代码实现、逐段解析)
数据结构学习记录——堆的删除(思路图解、代码实现、逐段解析)
18 1
|
2月前
|
算法
数据结构和算法常见的问题和代码
数据结构和算法常见的问题和代码
17 0
|
3月前
|
索引
【数据结构】单链表代码实现
【数据结构】单链表代码实现
21 1
|
3月前
|
存储 算法 搜索推荐
数据结构与算法⑰(第五章_八大排序)(完整代码+动图+详解+对比)(上)
数据结构与算法⑰(第五章_八大排序)(完整代码+动图+详解+对比)
43 6