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

简介: 引言: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");
      }
    }
  }
相关文章
|
6月前
|
前端开发 Java
java实现队列数据结构代码详解
本文详细解析了Java中队列数据结构的实现,包括队列的基本概念、应用场景及代码实现。队列是一种遵循“先进先出”原则的线性结构,支持在队尾插入和队头删除操作。文章介绍了顺序队列与链式队列,并重点分析了循环队列的实现方式以解决溢出问题。通过具体代码示例(如`enqueue`入队和`dequeue`出队),展示了队列的操作逻辑,帮助读者深入理解其工作机制。
168 1
|
12月前
|
算法 开发者 计算机视觉
燃爆全场!Python并查集:数据结构界的网红,让你的代码炫酷无比!
在编程的世界里,总有一些数据结构以其独特的魅力和高效的性能脱颖而出,成为众多开发者追捧的“网红”。今天,我们要介绍的这位明星,就是Python中的并查集(Union-Find)——它不仅在解决特定问题上大放异彩,更以其优雅的设计和强大的功能,让你的代码炫酷无比,燃爆全场!
140 0
|
算法 安全 大数据
揭秘!Python堆与优先队列:数据结构的秘密武器,让你的代码秒变高效战士!
【7月更文挑战第8天】Python的heapq模块和queue.PriorityQueue提供堆与优先队列功能,助你提升算法效率。堆用于快速找大数据集的第K大元素,如示例所示,时间复杂度O(n log k)。PriorityQueue在多线程中智能调度任务,如模拟下载管理器,按优先级处理任务。掌握这些工具,让代码运行更高效!
168 1
|
11月前
|
并行计算 算法 测试技术
C语言因高效灵活被广泛应用于软件开发。本文探讨了优化C语言程序性能的策略,涵盖算法优化、代码结构优化、内存管理优化、编译器优化、数据结构优化、并行计算优化及性能测试与分析七个方面
C语言因高效灵活被广泛应用于软件开发。本文探讨了优化C语言程序性能的策略,涵盖算法优化、代码结构优化、内存管理优化、编译器优化、数据结构优化、并行计算优化及性能测试与分析七个方面,旨在通过综合策略提升程序性能,满足实际需求。
274 1
|
12月前
|
存储 Java 开发者
Java中的Map接口提供了一种优雅的方式来管理数据结构,使代码更加清晰、高效
【10月更文挑战第19天】在软件开发中,随着项目复杂度的增加,数据结构的组织和管理变得至关重要。Java中的Map接口提供了一种优雅的方式来管理数据结构,使代码更加清晰、高效。本文通过在线购物平台的案例,展示了Map在商品管理、用户管理和订单管理中的具体应用,帮助开发者告别混乱,提升代码质量。
115 1
|
存储 算法 C语言
数据结构基础详解(C语言):单链表_定义_初始化_插入_删除_查找_建立操作_纯c语言代码注释讲解
本文详细介绍了单链表的理论知识,涵盖单链表的定义、优点与缺点,并通过示例代码讲解了单链表的初始化、插入、删除、查找等核心操作。文中还具体分析了按位序插入、指定节点前后插入、按位序删除及按值查找等算法实现,并提供了尾插法和头插法建立单链表的方法,帮助读者深入理解单链表的基本原理与应用技巧。
1839 6
|
存储 C语言 C++
数据结构基础详解(C语言) 顺序表:顺序表静态分配和动态分配增删改查基本操作的基本介绍及c语言代码实现
本文介绍了顺序表的定义及其在C/C++中的实现方法。顺序表通过连续存储空间实现线性表,使逻辑上相邻的元素在物理位置上也相邻。文章详细描述了静态分配与动态分配两种方式下的顺序表定义、初始化、插入、删除、查找等基本操作,并提供了具体代码示例。静态分配方式下顺序表的长度固定,而动态分配则可根据需求调整大小。此外,还总结了顺序表的优点,如随机访问效率高、存储密度大,以及缺点,如扩展不便和插入删除操作成本高等特点。
682 5
|
存储 C语言
数据结构基础详解(C语言): 栈与队列的详解附完整代码
栈是一种仅允许在一端进行插入和删除操作的线性表,常用于解决括号匹配、函数调用等问题。栈分为顺序栈和链栈,顺序栈使用数组存储,链栈基于单链表实现。栈的主要操作包括初始化、销毁、入栈、出栈等。栈的应用广泛,如表达式求值、递归等场景。栈的顺序存储结构由数组和栈顶指针构成,链栈则基于单链表的头插法实现。
1385 3
|
存储 算法 C语言
C语言手撕数据结构代码_顺序表_静态存储_动态存储
本文介绍了基于静态和动态存储的顺序表操作实现,涵盖创建、删除、插入、合并、求交集与差集、逆置及循环移动等常见操作。通过详细的C语言代码示例,展示了如何高效地处理顺序表数据结构的各种问题。
139 1
|
12月前
|
存储 算法 索引
HashMap底层数据结构及其增put删remove查get方法的代码实现原理
HashMap 是基于数组 + 链表 + 红黑树实现的高效键值对存储结构。默认初始容量为16,负载因子为0.75。当存储元素超过容量 * 负载因子时,会进行扩容。HashMap 使用哈希算法计算键的索引位置,通过链表或红黑树解决哈希冲突,确保高效存取。插入、获取和删除操作的时间复杂度接近 O(1)。
216 0