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

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

🎋在主函数中实现

//插入—— 在第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++;
}

🎊🎊删除

🎋删除顺序表中postion位置的结点

void SeqList_Dele(SeqList* p,int pos)
{
  if (p->size == 0)
  {
    printf("顺序表是空的!\n");
    exit(-1);
  }
  if (pos < 0 || pos >= p->size)
  {
    printf("指定删除的位置不存在!\n");
    exit(-1);
  }
  int i;
  for (i = pos; i < p->size - 1; i++)
    p->a[i] = p->a[i + 1];
  p->size--;
}

🎋在主函数中实现

  //删除顺序表中position位置的结点
  printf("请输入要删除结点的位置:\n");
  int pos = 0;
  scanf("%d", &pos);
  SeqList_Dele(&s, pos);
  SQList_Print(&s);//打印线性表

🎊🎊倒置顺序表

//顺序表倒置
void SeqList_Inverse(SeqList* p)
{
  int i,j,tmp;
  for (i = 0,j=p->size-1; i < p->size / 2; i++,j--)
  {
    tmp = p->a[i];
    p->a[i] = p->a[j];
    p->a[j] = tmp;  
  }
}

🎋主函数中实现

//顺序表倒置
  SeqList_Inverse(&s);
  SQList_Print(&s);//打印元素

🎊🎊求顺序表中值为x的结点的个数

//求顺序表中值为x的结点的个数
int SeqList_Find_X(SeqList* p,DataType x)
{
  int i = 0,count=0;
  for (i = 0; i < p->size; i++)
  {
    if (p->a[i] == x)
      count++;
  }
  return count;
}

🎋主函数中实现

  //求顺序表中值为x的结点的个数
  int X,count;
  printf("请输入要查找的值:\n");
  scanf("%d", &X);
  count = SeqList_Find_X(&s, X);
  printf("顺序表中值为x的结点的个数为%d", count);

🎇🎇🎇完整代码

SeqList.c:编写实现各种功能的函数。

SeqList.h:头文件,包含需要的头文件和结构体的声明异界函数的声明。

test.c:用来测试,主要在主函数中调用函数

🎇SeqList.h

#pragma once
#define _CRT_SECURE_NO_WARNINGS 1
#define MAX 100
#include <stdio.h>
#include<stdlib.h>
//创建静态线性表
typedef int DataType;
typedef struct SeqList
{
  DataType a[MAX];
  int size;
}SeqList;
//函数声明
void SQList_Init(SeqList* p);
void SQList_Create(SeqList* p);
void SQList_Print(SeqList* p);
void SQList_PushFront(SeqList* p, DataType x);
void Push_Back_SQList(SeqList* p, DataType x);
void SQList_Pop_Front(SeqList* p);
void SQList_Pop_Back(SeqList* p);
DataType SeqList_Get(SeqList* p, int i);
void SeqList_Find(SeqList* p, DataType x);
void SeqList_Insert(SeqList* p, int i, DataType x);
void SeqList_Inverse(SeqList* p);
void SeqList_Dele(SeqList* p, int pos);
int SeqList_Find_X(SeqList* p, DataType x);

🎇SeqList.c

#include "SeqList.h"
//初始化——置空顺序表
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个节点的值(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的结点
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个位置添加元素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++;
}
void SeqList_Dele(SeqList* p,int pos)
{
  if (p->size == 0)
  {
    printf("顺序表是空的!\n");
    exit(-1);
  }
  if (pos < 0 || pos >= p->size)
  {
    printf("指定删除的位置不存在!\n");
    exit(-1);
  }
  int i;
  for (i = pos; i < p->size - 1; i++)
    p->a[i] = p->a[i + 1];
  p->size--;
}
//顺序表倒置
void SeqList_Inverse(SeqList* p)
{
  int i,j,tmp;
  for (i = 0,j=p->size-1; i < p->size / 2; i++,j--)
  {
    tmp = p->a[i];
    p->a[i] = p->a[j];
    p->a[j] = tmp;  
  }
}
//求顺序表中值为x的结点的个数
int SeqList_Find_X(SeqList* p,DataType x)
{
  int i = 0,count=0;
  for (i = 0; i < p->size; i++)
  {
    if (p->a[i] == x)
      count++;
  }
  return count;
}

🎇test.c

#include "SeqList.h"
int main()
{
  SeqList s;//创建线性表变量
  SQList_Init(&s);//初始化
  SQList_Create(&s);//创建一个线性表
  SQList_Print(&s);//打印元素
  //头插
  printf("------头插------\n");
  printf("请输入要头插的元素>\n");
  int x;
  scanf("%d", &x);
  SQList_PushFront(&s, x);
  SQList_Print(&s);//打印头插之后的线性表
  //尾插
  printf("------尾插------\n");
  int y;
  printf("请输入要尾插的元素>\n");
  scanf("%d", &y);
  Push_Back_SQList(&s,y);
  SQList_Print(&s);//打印尾插之后的线性表
  //头删
  printf("------头删------\n");
  SQList_Pop_Front(&s);
  SQList_Print(&s);//打印头删之后的线性表
  //尾删
  printf("------尾删------\n");
  SQList_Pop_Back(&s);
  SQList_Print(&s);//打印尾之后删的线性表
  //查找第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);
  //插入—— 在第j个位置添加元素x
  int j;
  int b;
  printf("\n请输入要插入的位置>\n");
  scanf("%d", &j);
  printf("请输入要插入的元素>\n");
  scanf("%d", &b);
  SeqList_Insert(&s, j, b);
  SQList_Print(&s);//打印元素
  //删除顺序表中position位置的结点
  printf("请输入要删除结点的位置:\n");
  int pos = 0;
  scanf("%d", &pos);
  SeqList_Dele(&s, pos);
  SQList_Print(&s);//打印线性表
  //顺序表倒置
  SeqList_Inverse(&s);
  SQList_Print(&s);//打印元素
  //求顺序表中值为x的结点的个数
  int X,count;
  printf("请输入要查找的值:\n");
  scanf("%d", &X);
  count = SeqList_Find_X(&s, X);
  printf("顺序表中值为x的结点的个数为%d", count);
  return 0;
}


相关文章
|
4天前
|
C++
数据结构(顺序表 动态定义
数据结构(顺序表 动态定义
11 2
|
27天前
浅谈顺序表基本操作
浅谈顺序表基本操作
|
2月前
|
存储 编译器
数据结构之顺序表的实现(详解!附完整代码)
数据结构之顺序表的实现(详解!附完整代码)
37 1
实现顺序表增删查改的基本操作(纯代码版)
实现顺序表增删查改的基本操作(纯代码版)
|
5月前
|
算法
数据结构之顺序表的实现(含全部代码)
数据结构之顺序表的实现(含全部代码)
32 0
|
7月前
|
人工智能 C语言
线性表的定义和基本操作
线性表的定义和基本操作
|
8月前
静态顺序表及基本操作具体实现 1
静态顺序表及基本操作具体实现
29 0
|
10月前
|
存储 算法
【数据结构和算法】实现线性表中的静态、动态顺序表(下)
【数据结构和算法】实现线性表中的静态、动态顺序表(下)
|
10月前
|
存储 算法 C语言
【数据结构和算法】实现线性表中的静态、动态顺序表(上)
【数据结构和算法】实现线性表中的静态、动态顺序表
121 0
|
12月前
|
存储 C语言
栈的定义及基本操作实现(顺序栈)
栈的定义及基本操作实现(顺序栈)
130 0