利用C语言实现静态顺序表

//---------- 头文件#include "SeqList.h" --------------------

#pragma once

#include<stdio.h>
#include<stdlib.h>
#include<string.h>

#define MAX 100

//------------------ 定义数据类型 ----------------------------
typedef int DataType;

//------------ 线性表的静态分配顺序存储结构 ----------------
typedef struct SeqList
{
 DataType arr[MAX];
 int size;
}SeqList,*pSeqList;

//---------------------- 基本操作 ----------------------------
void InitSeqList(pSeqList pslist);                            //初始化
void PrintSeqList(SeqList slist);                              //打印顺序表
void PushBack(pSeqList pslist, DataType x);         //尾插
void PopBack(pSeqList pslist);                              //尾删
void PushFront(pSeqList pslist, DataType x);        //头插
void PopFront(pSeqList pslist);                             //头删
void Insert(pSeqList pslist, int pos, DataType x);  //插入
void Remove(pSeqList pslist,DataType x);            //删除
void RemoveAll(pSeqList pslist, DataType x);       //删除所有相同节点
int Find(pSeqList pslist,DataType x);                     //查找
void ReverseList(pSeqList pslist);                          //逆序
void SortList(pSeqList pslist);                                //排序
int BinarySearch(pSeqList pslist,DataType x);       //折半查找

//------------- 基本操作的实现 ---------------------------
#include "SeqList.h"

void InitSeqList(pSeqList pslist)//初始化
{
 memset(pslist->arr, 0, sizeof(pslist->arr));
 pslist->size = 0;
}

void PrintSeqList(SeqList slist)//打印顺序表
{
 int i = 0;
 for(i=0; i<slist.size; i++)
 {
  printf("%d ",slist.arr[i]);
 }
 printf("over\n");
}

void PushBack(pSeqList pslist, DataType x)//尾插
{
 if(pslist->size >= MAX)
 {
  printf("顺序表已满!");
 }
 pslist->arr[pslist->size] = x;
 pslist->size++;
}

void PopBack(pSeqList pslist)//尾删
{
 if(pslist->size == 0)
 {
  printf("顺序表为空!");
 }
 pslist->size--;
}

void PushFront(pSeqList pslist, DataType x)//头插
{
 int i=0;
 if(pslist->size >=MAX)
 {
  printf("顺序表已满!");
 }
 for(i = pslist->size; i > 0; i--)
 {
  pslist->arr[i] = pslist->arr[i-1];
 }
 pslist->arr[0] = x;
 pslist->size++;
}

void PopFront(pSeqList pslist)//头删
{
 int i=0;
 if(pslist->size == 0)
 {
  printf("顺序表为空");
 }
 for(i=0;i<pslist->size-1;i++)
 {
  pslist->arr[i] = pslist->arr[i+1];
 }
 pslist->size-- ;
}

void Insert(pSeqList pslist, int pos, DataType x) //插入
{
 int i=0;
 if(pslist->size >= MAX)
 {
  printf("顺序表已满!");
 }
 for(i=pslist->size;i>pos;i--)
 {
  pslist->arr[i] = pslist->arr[i-1];
 }
 pslist->arr[pos] = x;
 pslist->size++ ;
}

void Remove(pSeqList pslist,DataType x) //删除
{
 int pos = Find(pslist,x);
 int i = 0;
 for(i = pos;i < pslist->size-1;i++)
 {
  pslist->arr[i] = pslist->arr[i+1];
 }
 pslist->size--;
}

void RemoveAll(pSeqList pslist, DataType x) //删除所有相同节点
{
 int i = 0;
 int pos = Find(pslist, x);
 while(pos != -1)
 {
  for(i = pos;i<pslist->size-1;i++)
  {
   pslist->arr[i] = pslist->arr[i+1];
  }
  pslist->size--;
  pos = Find(pslist,x);
 }
}

int Find(pSeqList pslist,DataType x)//查找
{
 int i = 0;
 for(i = 0;i < pslist->size;i++)
 {
  if(pslist->arr[i] == x)
  {
   return i;
  }
 }
 return -1;
}

void ReverseList(pSeqList pslist)//逆序
{
 int start = 0;
 int end = pslist->size-1;
 while(start < end)
 {
  DataType tmp =pslist->arr[start];
  pslist->arr[start] = pslist->arr[end];
  pslist->arr[end] = tmp;
  start++;
  end--;
 }
}

void SortList(pSeqList pslist)//排序
{
 int i = 0,j = 0;
 for(i = 0;i<pslist->size-1;i++)
 {
  for(j = 0;j<=pslist->size-2-i;j++)
  {
   if(pslist->arr[j] > pslist->arr[j+1])
   {
    DataType tmp = pslist->arr[j];
    pslist->arr[j] = pslist->arr[j+1];
    pslist->arr[j+1] = tmp;
   }
  }
 }
}

int BinarySearch(pSeqList pslist,DataType x)//折半查找
{
 int start = 0;
 int end = pslist->size-1;
 while(start < end)
 {
  int mid = (start + end)/2;
  if(x == pslist->arr[mid])
   return mid;
  else if(x < pslist->arr[mid])
  {
   end = mid - 1;
  }
  else
  {
   start = mid + 1;
  }
  return mid;
 }
 return 0;
}

//----------------- 测试函数 ---------------------------------

#include "SeqList.h"

void test1()
{
 SeqList seqlist1;
 InitSeqList(&seqlist1);
 PushBack(&seqlist1,1);
 PushBack(&seqlist1,2);
 PushBack(&seqlist1,3);
 PushBack(&seqlist1,4);
 PrintSeqList(seqlist1);
 PopBack(&seqlist1);
 PrintSeqList(seqlist1);
 PushFront(&seqlist1,8);
 PrintSeqList(seqlist1);
 PopFront(&seqlist1);
 PrintSeqList(seqlist1);
}

void test2()
{
 int ret = 0;
 SeqList seqlist1;
 InitSeqList(&seqlist1);
 PushBack(&seqlist1,1);
 PushBack(&seqlist1,2);
 PushBack(&seqlist1,3);
 PushBack(&seqlist1,4);
 PrintSeqList(seqlist1);
 Insert(&seqlist1 ,4 ,6 );
 PrintSeqList(seqlist1);
 ret = Find(&seqlist1, 4);
 printf("%d \n" ,ret);
}

void test3()
{
 int ret = 0;
 SeqList seqlist1;
 InitSeqList(&seqlist1);
 PushBack(&seqlist1,2);
 PushBack(&seqlist1,1);
 PushBack(&seqlist1,2);
 PushBack(&seqlist1,3);
 PushBack(&seqlist1,2);
 PushBack(&seqlist1,4);
 PushBack(&seqlist1,2);
 PrintSeqList(seqlist1);
 Remove(&seqlist1,3);
 PrintSeqList(seqlist1);
 RemoveAll(&seqlist1, 2);
 PrintSeqList(seqlist1);
}
void test4()
{
 int ret = 0;
 SeqList seqlist1;
 InitSeqList(&seqlist1);
 PushBack(&seqlist1,1);
 PushBack(&seqlist1,2);
 PushBack(&seqlist1,3);
 PushBack(&seqlist1,4);
 PrintSeqList(seqlist1);
 ReverseList(&seqlist1);
 PrintSeqList(seqlist1);
}
void test5()
{
 int ret = 0;
 SeqList seqlist1;
 InitSeqList(&seqlist1);
 PushBack(&seqlist1,3);
 PushBack(&seqlist1,1);
 PushBack(&seqlist1,4);
 PushBack(&seqlist1,2);
 PrintSeqList(seqlist1);
 SortList(&seqlist1);
 PrintSeqList(seqlist1);
 ret = BinarySearch(&seqlist1, 2);
 printf("%d\n",ret);
}
int main()
{
 test5();
 system("pause");
 return 0;
}

转载于:https://blog.51cto.com/liu153/1752128

利用C语言实现顺序表相关推荐

  1. c语言实现顺序表源程序,C语言实现静态顺序表的实例详解

    C语言实现静态顺序表的实例详解 线性表 定义一张顺序表也就是在内存中开辟一段连续的存储空间,并给它一个名字进行标识.只有定义了一个顺序表,才能利用该顺序表存放数据元素,也才能对该顺序表进行各种操作. ...

  2. 【C语言】顺序表的创建

    一.代码实现部分: 1.顺序表是线性表的基础部分,至于顺序表,在本人看来无异于数组.至于线性表的概念,在此不再赘述.接下来尝试利用C语言对线性表中的顺序表进行代码实现(此程序中规定用户输入的数据类型为 ...

  3. 逆置单链表c语言程序,(数据结构C语言版)顺序表和单链表的逆置

    <(数据结构C语言版)顺序表和单链表的逆置>由会员分享,可在线阅读,更多相关<(数据结构C语言版)顺序表和单链表的逆置(7页珍藏版)>请在人人文库网上搜索. 1.实验1-1顺序 ...

  4. C语言实现顺序表(顺序存储结构)

    顺序表(顺序存储结构)及初始化过程详解 顺序表,全名顺序存储结构,是线性表的一种.通过<线性表>一节的学习我们知道,线性表用于存储逻辑关系为"一对一"的数据,顺序表自然 ...

  5. C语言数据结构顺序表的顺序查找和折半查找的功能

    C语言顺序表顺序查找和折半查找的基本思想和应用 顺序查找算法:又称为线性查找,主要用在-线性表-中进行查找 通常分为:1-无序线性表的一般查找: 2-对关键字有序的顺序表查找: 优缺点分析: 缺点:当 ...

  6. c语言线性顺序表,C语言程序——线性顺序表.doc

    C语言程序--线性顺序表.doc 下载提示(请认真阅读)1.请仔细阅读文档,确保文档完整性,对于不预览.不比对内容而直接下载带来的问题本站不予受理. 2.下载的文档,不会出现我们的网址水印. 3.该文 ...

  7. 【数据结构和算法笔记】c语言实现顺序表和链表

    线性表的定义: 线性表中元素关系是一对一的,元素个数是有限的 序列补充: 存在唯一开始元素和终端元素,除此之外,每个元素只有唯一的前驱元素和后继元素 线性表的长度: 线性表中所含元素的个数(n),n= ...

  8. C语言创建顺序表并插入元素 详细注释

    顺序表是用一组地址连续的存储单元依次存储数据元素的数据结构.顺序表是线性表的一种,线性表是最常用且最简单的一种数据结构,一个线性表是 n 个数据元素的有限序列.我们使用 c 语言来创建顺序表并插入元素 ...

  9. C语言--实现顺序表的基本操作

    一.预备知识(先说到这么多,具体问题和所需的内容在后面的编程中再说) 1.开发环境和开发语言: 环境:visual studio 2019 语言:C 2.形参的生命周期(一定要明白形参的生存周期,特别 ...

最新文章

  1. 构造数组MaxTree、环形单链表的约瑟夫问题等总结
  2. java event 异步_[转]java异步编程
  3. mysql索引_mysql系列:深入理解mysql 索引特性(屡试不爽的mysql索引总结)
  4. SQL(三)- 连接查询
  5. 华为云落地敏捷+DevOps,助力大企业高效能
  6. Canalys:2021年第四季度苹果智能手机出货量占全球总量的22%
  7. 微信更新的这功能“炸了”:网友集体吐槽 忍不了
  8. xp彻底删除mysql_xp彻底清除mysql数据库
  9. 项目团队中的五种人(之一)
  10. 关于python中enumerate和zip函数的用法及举例
  11. 政务大数据云平台体系及作用
  12. DMA控制器原理详解
  13. ARM ELF 镜像结构
  14. 阿里云全球交付中心正式成立,打造一流的全球服务能力
  15. Unknown module(s) in QT: webenginewidgets原因及解决办法
  16. color constancy dataset(白平衡仿真数据集)
  17. VIM 插件管理--Vim-plug
  18. Unet++语义分割网络(网络结构分析+代码分析)
  19. 我的心像洋葱,需要一层一层剥开,你才明白这颗心多爱你:Abstract中继承关系中,变量初始化与构造方法的关系
  20. 科普|关于FPGA你知道多少?

热门文章

  1. 获取指定路径文件方法
  2. .NET4.0并行计算技术基础(8)
  3. sar分辨率公式_初识合成孔径雷达SAR
  4. Python学习的十个阶段,学完大成,对应一下看看你自己在哪个阶段
  5. netbeans 添加gif图片_怎么制作动态图片?手机如何制作清晰gif动图?
  6. 梦到计算机坏了无法算账,梦见算账,做梦梦见算账是什么征兆?
  7. three.js 贴图只显示颜色_C4D作品“花里胡哨”?我怀疑你贴图方式有问题……
  8. JavaScript初学者编程题(16)
  9. recyclerview 软键盘_android-打开键盘时,Recyclerview不会滚动到结尾
  10. 【2-SAT问题】解题报告:POJ 3678 Katu Puzzle(2-SAT问题的判定)