静态顺序表及基本操作具体实现 1

简介: 静态顺序表及基本操作具体实现

🎑定义一个顺序表

//创建静态线性表
typedef int DataType;
typedef struct SeqList
{
  DataType a[MAX];
  int size;
}SeqList;

🎑 初始化——置空顺序表

//初始化——置空顺序表
void SQList_Init(SeqList* p)
{
  p->size = 0;
}

🎑创建一个顺序表

//创建一个顺序表
void SQList_Create(SeqList* p)
{
  int n,i;
  printf("请输入元素的个数>\n");
  scanf("%d", &n);
  printf("请依次输入元素>\n");
  for (i = 0; i < n; i++)
  {
    scanf("%d", &p->a[i]);
    p->size++;
  }
  printf("\n");
}

🎑打印顺序表各结点的值

//打印顺序表各结点的值
void SQList_Print(SeqList* p)
{
  int i = 0;
  for (i = 0; i < p->size; i++)
  {
    printf("%-3d", p->a[i]);
  }
  printf("\n");
}

🎊🎊 顺序表基本操作

🎃头插

//头插
void SQList_PushFront(SeqList* p,DataType x)
{
  int i;
  if (p ->size == MAX)
  {
    printf("顺序表是满的!\n");
    exit(-1);
  }
  for (i = p->size; i >= 0; i--)
  {
    p->a[i] = p->a[i - 1];
  }
  p -> a[0] = x;
  p->size++;
}

🎃尾插

//尾插
void Push_Back_SQList(SeqList* p,DataType x)
{
  if (p->size == MAX)
  {
    printf("顺序表是满的!\n");
    exit(-1);
  }
  p->a[p->size] = x;
  p->size++;
}

🎃头删

//头删
void SQList_Pop_Front(SeqList* p)
{
  int i;
  if (p->size == 0)
  {
    printf("顺序表是空的!\n");
    exit(-1);
  }
  for (i = 1; i >= 0; i--)
  {
    p->a[i - 1] = p->a[i];
  }
  p->size--;
  printf("\n");   
}

🎃尾删

//尾删
void SQList_Pop_Back(SeqList* p)
{
  p->size--;

🎊🎊查找

🎋查找第i个节点的值

//查找第i个节点的值(0,1...p->size-1)
DataType SeqList_Get(SeqList* p,int i)
{
  if (i < 0 || i >= p->size)
  {
    printf("指定位置的结点不存在~\n");
    exit(-1);
  }
  return p ->a[i];
}

🎋查找值为x的结点

//查找值为x的结点
void SeqList_Find(SeqList* p,DataType x)
{
  int i = 0;
  for (i = 0; i < p->size; i++)
  {
    if (p->a[i] == x)
    {
      printf("找到了!\n");
      printf("下标为%d", i);
    }
  }
}

🎋在主函数中实现

  //查找第i个节点的值
  printf("------查找第i个节点的值------\n");
  printf("请输入查找的结点\n");
  int i;
  scanf("%d", &i);
  printf("\n第%d个结点的值为%d\n", i,SeqList_Get(&s, i));
  //查找值为a的结点
  printf("------查找值为a的结点------\n");
  int a;
  printf("请输入要查找的值>\n");
  scanf("%d", &a);
  SeqList_Find(&s, a);

🎊🎊插入

🎋在第i个位置添加元素x

//插入—— 在第i个位置添加元素x
void SeqList_Insert(SeqList* p, int i, DataType x)
{
  int j;
  if (i <= 0 || i >= p->size)
  {
    printf("插入位置不在范围内!\n");
    exit(-1);
  }
  if (p->size == MAX)
  {
    printf("线性表已满!\n");
    exit(-1);
  }
  for (j = p->size; j > i; j--)
    p->a[j] = p->a[j-1];
  p->a[i] = x;
  p->size++;
}


相关文章
|
并行计算 Java API
|
JavaScript 前端开发
为什么typeof null 是object
为什么typeof null 是object
286 1
|
前端开发 JavaScript API
React将组件作为属性传递的最佳实践
本文探讨了在React中将组件作为属性传递的三种常见方式:作为元素传递、作为组件传递、作为函数传递。通过构建带图标的按钮组件,对比分析了每种方式的优缺点,最终推荐将组件作为函数传递,因为它提供了更好的可控性、灵活性和可扩展性。
206 0
|
前端开发 容器
【Web 前端】清除浮动有哪些方法?
【4月更文挑战第22天】【Web 前端】清除浮动有哪些方法?
如何切换Hbuild - X编辑器背景色,如何切换Hbuild - X编辑器风格
如何切换Hbuild - X编辑器背景色,如何切换Hbuild - X编辑器风格
1293 0
|
存储 NoSQL JavaScript
Linux下快速搭建YApi接口管理平台
目录 一、序言 二、安装Node 1、安装nvm 2、使用兼容的Node版本 二、安装MongoDB 1、下载MongoDB 2、配置MongoDB 三、安装YApi 四、安装PM2管理Node服务 五、登录YApi后台
Linux下快速搭建YApi接口管理平台
|
Linux C语言
RTSP协议的实现
RTSP协议的实现
301 0
|
弹性计算 容灾 定位技术
构建弹性高可用的云计算环境:ECS的扩展与高可用性设计
本文深入研究了云服务器ECS的自动伸缩和高可用性设计,重点关注了弹性伸缩原理与应用、自动伸缩策略、负载均衡器的使用,以及跨地域容灾架构的建立。通过实际代码示例,读者能够全面了解如何在云计算环境中实现弹性的资源管理和高可用性的应用架构。
741 0
|
存储 弹性计算 对象存储
阿里云服务器ECS快照收费标准(按量付费/OSS存储抵扣)
阿里云服务器ECS快照收费标准(按量付费/OSS存储抵扣),阿里云快照服务怎么收费?阿里云服务器快照价格按量付费每小时扣费,快照费用是按照快照所占用的存储空间大小计费的,普通快照1GB价格为0.12元/GB/月,阿里云百科分享2023阿里云服务器快照收费标准:
1243 0
阿里云服务器ECS快照收费标准(按量付费/OSS存储抵扣)
|
存储 算法 Java
Java数据结构与算法分析(三)链表(单链表、双链表、环形链表)
通过前篇文章《[数组](https://blog.csdn.net/gozhuyinglong/article/details/109702860)》了解到数组的存储结构是一块连续的内存,插入和删除元素时其每个部分都有可能整体移动。为了避免这样的线性开销,我们需要保证数据可以不连续存储。本篇介绍另一种数据结构:链表。
422 0

热门文章

最新文章