C语言实现顺序表(静态)

C语言 — 静态顺序表实现通讯录 静态顺序表实现通讯录 阅读详情

静态顺序表

头文件

#ifndef SeqList_h
#define SeqList_h

typedef int DataType;

#define MAX_SIZE 10      //顺序表的容量,可调整

typedef struct SeqList
{
    DataType _array[MAX_SIZE];
    int _size;            //已存元素个数,即下一个元素的位置
}SeqList;

void SeqListInit(SeqList* pSeq);                    //初始化
void SeqListPushBack(SeqList* pSeq, DataType data); //尾部添加
void SeqListPopBack(SeqList* pSeq);                 //尾部删除
void SeqListPushFront(SeqList* pSeq, DataType data);//头部添加
void SeqListPopFront(SeqList* pSeq);                //头部删除
void SeqListInsert(SeqList* pSeq, int pos, DataType data);//指定位置插入
void SeqListErase(SeqList* pSeq, int pos);          //删除指定位置元素
void SeqListRemove(SeqList* pSeq, DataType data);   //删除指定元素
void SeqListRemoveAll(SeqList* pSeq, DataType data);//删除所有元素
int SeqListFind(SeqList* pSeq, DataType data);      //查找某元素返回位置
void SeqListSize(SeqList* pSeq);                    //查看当前元素个数
//------------
void PrintList(SeqList* pSeq);                      //打印顺序表
void BubbleSort(SeqList* pSeq);                     //冒泡排序
void SelectSort(SeqList* pSeq);                     //选择排序
void BinarySearch(SeqList* pSeq, DataType data);    //折半查找

#endif /* SeqList_h */

源文件

#include <stdio.h>
#include "SeqList.h"

void SeqListInit(SeqList* pSeq)
{
    for (int i = 0; i<MAX_SIZE; i++)
    {
        pSeq->_array[i] = 0;
        pSeq->_size = 0;
    }
}

void SeqListPushBack(SeqList* pSeq, DataType data)
{
    pSeq->_array[pSeq->_size] = data;
    pSeq->_size ++;
}

void SeqListPopBack(SeqList* pSeq)
{
    pSeq->_size --;
}

void SeqListPushFront(SeqList* pSeq, DataType data)
{
    if (pSeq->_size == MAX_SIZE)
    {
        printf("size==MAX_SIZE can't Push!\n");
        return;
    }
    for (int i = pSeq->_size; i>0; i--)
    {
        pSeq->_array[i] = pSeq->_array[i-1];
    }
    pSeq->_array[0] = data;
    pSeq->_size++;
}

void SeqListPopFront(SeqList* pSeq)
{
    for (int i = 0; i<pSeq->_size-1; i++)
    {
        pSeq->_array[i] = pSeq->_array[i+1];
    }
    pSeq->_size--;
}

void SeqListInsert(SeqList* pSeq, int pos, DataType data)
{
    if (pSeq->_size == MAX_SIZE)
    {
        printf("size==MAX_SIZE can't Push!\n");
        return;
    }
    for (int i = pSeq->_size; i>pos; i--)
    {
        pSeq->_array[i] = pSeq->_array[i-1];
    }
    pSeq->_array[pos] = data;
    pSeq->_size++;
}

void SeqListErase(SeqList* pSeq, int pos)
{
    if (pos>=0 && pos < pSeq->_size)
    {
        for (int i = pos; i<pSeq->_size-1; i++)
        {
            pSeq->_array[i] = pSeq->_array[i+1];
        }
        pSeq->_size--;
    }
}

int SeqListFind(SeqList* pSeq, DataType data)
{
    for (int i = 0; i<pSeq->_size; i++)
    {
        if (data == pSeq->_array[i])
        {
            return i;
        }
    }
    return -1;
}


void SeqListRemove(SeqList* pSeq, DataType data)
{
    //    for (int i = 0; i<pSeq->_size; i++)
    //    {
    //        if (data == pSeq->_array[i])
    //        {
    //            SeqListErase(pSeq, i);
    //        }
    //    }
    int pos = SeqListFind(pSeq, data);
    if (pos >=0) {
        SeqListErase(pSeq, pos);
    }
}

void SeqListRemoveAll(SeqList* pSeq, DataType data)
{
    for (int i = 0; i<pSeq->_size; i++)
    {
        if (pSeq->_array[i] == data)
        {
            SeqListErase(pSeq, i);
            i--;
        }
    }
}


//-----------------
void PrintList(SeqList* pSeq)
{
    for (int i = 0; i<pSeq->_size; i++)
    {
        printf("%d ",pSeq->_array[i]);
    }
    printf("\n");
}
void swap(DataType* p1,DataType* p2)
{
    DataType tmp = *p1;
    *p1 = *p2;
    *p2 = tmp;

}

void BubbleSort(SeqList* pSeq)
{
    for (int i = 0; i<pSeq->_size; i++)
    {
        for (int j = 0; j<pSeq->_size-1-i; j++)
        {
            if (pSeq->_array[j]<pSeq->_array[j+1])
            {
                swap(pSeq->_array+j, pSeq->_array+j+1);

            }
        }
    }
}

void SelectSort(SeqList* pSeq)
{
    for (int i = 0; i<pSeq->_size-1; i++)
    {
        for (int j = i+1; j<pSeq->_size; j++)
        {
            if (pSeq->_array[i]<pSeq->_array[j])
            {
                swap(pSeq->_array+i, pSeq->_array+j);
            }
        }
    }
}

void BinarySearch(SeqList* pSeq, DataType data)
{
    int start = 0;
    int end = pSeq->_size-1;
    while (start<=end)
    {
        int mid = (start+end)/2;
        if (data == pSeq->_array[mid])
        {
            printf("the pos = %d\n",mid);
            return;
        }
        else if (data < pSeq->_array[mid])
        {
            end = mid-1;
        }
        else
        {
            start = mid+1;
        }
    }
    printf("Can't find!\n");
}
数据结构C语言——静态顺序表的实现 本文章主要是介绍关于数据结构中用C语言来实现顺序表的一些基本操作。 阅读详情

相关推荐

顺序表的C++程序实现

用模板方式实现顺序表的合并 #include "stdafx.h" #include #define MaxSize 100 template class SeqList { private: T * Mylist; int ListMaxSize; int Length; public: SeqList(int ListMaxSize=MaxSize); //构造函数 ~SeqList(void);// 析构函数 bool SLIsEmpty(void); // 判断表是否为空 bool SLIsFull(void);//判断表是否满 int ListLength(void){return Length;}//求表长度 T SLGetElem(int i); // 取得第i个元素的值 int SLFind(T & x,int index); //查找值为x的结点 bool SLInsert(int i,T & x); // 在表的第i个位置插入新结点 bool SLDelete(int i); // 删除表的第i个位置的结点 void CreateList(int num);// 创建一个包含num个元素的顺序表 void SLPrint(); //输出全体元素 }; template SeqList ::SeqList(int listMaxSize) //初始化顺序表 { if(listMaxSize>0){ ListMaxSize=listMaxSize; Length=0; Mylist=new T [ListMaxSize]; // 创建连续的表空间 } } template SeqList ::~SeqList(void) { delete [] Mylist;//删除表,释放表空间 } template void SeqList ::CreateList(int num) { T x; Length=0; cout << "请输入"<<num<<"个整数数据元素以创建一个线性表"<<endl; for (int i=0;i>x; Mylist[i]=x; Length++; } } template bool SeqList ::SLIsEmpty(void) // 判断表是否为空 { return (Length<=0)?true:false; //表空则返回真(true),否则返回假(false) } template bool SeqList ::SLIsFull(void)//判断表是否满 { return(Length>=ListMaxSize)?true:false; //表满则返回真(true),否则返回假(false) } template T SeqList ::SLGetElem(int i) // 取得第i个元素的值 { return(iLength-1)?-1:Mylist[i]; } template int SeqList ::SLFind(T & x,int index) //查找值为x的结点 { for(int i=0;i<index;i++) if(Mylist[i]==x) return i+1; return -1;//没有找到给定元素 } template bool SeqList ::SLInsert(int i,T & x) // 在表的第i个位置插入新结点 { if(iLength) {cout <<"参数i不合理!" <<endl; return false;} else if(Length==ListMaxSize) {cout<< "表已满,无法插入!"<i;j--) Mylist[j]=Mylist[j-1]; Mylist[j]=x; Length++; return true; } } template bool SeqList ::SLDelete(int i) // 删除表的第i个位置的结点 { if(iLength) {cout <<"参数i不合理!" <<endl; return false;} else if(Length==0) {cout<< "表已空,无无元素可删除!"<<endl; return false;} else{ for(int j=i;j<Length-1;j++)Mylist[j]=Mylist[j+1]; Length--; cout<<"删除操作成功"<<endl; return true; } } template void SeqList ::SLPrint(void) //输出全体元素 { if (SLIsEmpty()) cout<<"空表! 无元素可输出"<<endl; else{ cout<<"顺序表中的所有元素分别为: "; for (int i=0;i<Length;i++) cout<<Mylist[i]<<" "; } cout <<endl; } void ListUnion(SeqList &ListA;,SeqList &ListB;) { cout<<"两个参数对象的顺序表:"<<endl; ListA.SLPrint(); ListB.SLPrint(); int n,m; int XX,i=0; n=ListA.ListLength(); m=ListB.ListLength(); int j=i; while(i<m){ XX=ListB.SLGetElem(i); int k=ListA.SLFind(XX,n); if(k==-1) { ListA.SLInsert(n+j,XX); j++; } i++; } cout<<"两个顺序表合并后的结果"<<endl; ListA.SLPrint(); cout<<"ListUnion end"<<endl; } int main(int argc, char* argv[]) { SeqList myListA(20),myListB(30); int LenA,LenB; cout<>LenA; cout<<endl; myListA.CreateList(LenA); myListA.SLPrint(); cout<<endl<>LenB; cout<<endl; myListB.CreateList(LenB); myListB.SLPrint(); ListUnion(myListA,myListB); return 0; }

『初阶数据结构 • C语言』⑦ - 静态顺序表详解(附完整源码)

线性表(linear list)是n个具有相同特性的数据元素的有限序列。线性表是一种在实际中广泛使用的数据结构,常见的线性表:顺序表、链表、栈、队列、字符串...线性表在逻辑上是线性结构,也就说是连续的一条直线。但是在物理结构上并不一定是连续的,线性表在物理上存储时,通常以数组和链式结构的形式存储。顺序表是用一段物理地址连续的存储单元依次存储数据元素的线性结构,一般情况下采用数组存储。在数组上完成数据的增删查改。

花想云的博客 2023

C语言实现静态顺序表的实例详解

C语言实现静态顺序表的实例详解 线性表 定义一张顺序表也就是在内存中开辟一段连续的存储空间,并给它一个名字进行标识。只有定义了一个顺序表,才能利用该顺序表存放数据元素,也才能对该顺序表进行各种操作。 接下来看看静态的顺序表,直接上代码: SeqList.h #define _CRT_SECURE_NO_WARNINGS 1 #ifndef __SEQLIST_H__ #define __SEQLIST_H__ #include #include #include #include #define MAX 1

用C语言实现静态顺序表

用C语言实现静态顺序表

baidu_39630193的博客 846

SAP S4 HANA 新资产会计中的平行分类账估值

在资产会计中,我们可以设置使用折旧区域的平行分类账会计 我们需要根据涉及的会计原则定义折旧区域,在我们的方案中,公司 FR01 是一家国际集团的当地分支机构,公司 FR01 需要按照集团会计准则 IFRS 和当地 GAAP 会计准则报告财务报表。过账到 LG 会计原则(分类帐 2L)-->分类账 2L的 150 欧元损失 -->在 IFRS 折旧区域,我们有 100 欧元的收益,在 LG 折旧区域,我们有 150 欧元的损失,使用平行分类账 0L 和 2L,我们能够根据不同的会计原则进行平行估值。

yanzibing99的博客 1328

【SLG游戏服务器开发手册】(ROK Like)沙盘地图篇一,菱形瓦片与笛卡尔坐标系的转换(附调试工具)

轴向坐标:以菱形网格对角方向为基准轴,记作(q, r)菱形瓦片宽度 w=2a,高度 h=a(宽高比2:1)

代码时光 980

C语言实现静态顺序表

首先,我们需要知道的是,什么是线性表?线性表就是 n (n>=0) 个数据元素组成的一个有序序列,可以在任意位置上进行插入和删除操作的线性数据结构。线性表从数据在物理内存存储形式上分为:顺序表和链表。 在下面,我们只讨论顺序表。 顺序表的定义:用一段地址连续的存储单元依此存储数据元素的线性结构。 通过顺序表的定义,我们知道地址...

lxt-st 930

SAP OBYC自动过账全解析:从BSX到WRX的会计科目配置指南

本文深入解析SAP OBYC自动过账功能,从BSX到WRX的会计科目配置全流程,涵盖评估分组代码、事务码和评估类等核心概念。通过实战案例展示如何实现库存变动到财务过账的自动化流转,提升企业财务数据的准确性和效率。

weixin_29239279的博客 418

数据结构 静态顺序表(C语言)

数据结构 静态顺序表 一、线性表 1.数据结构中,线性结构习惯称为线性表,线性表是最简单也是最常用的一种数据结构。 2.线性表可以表示为:(A_1,A_2,A_3,…,A_N),其中,A_i(i=1,2,…,n)是线性表的数据元素,也称为线性表的一个节点,同一线性表中的数据元素必定具有相同的特性,即属于同一数据对象。数组、矩阵、向量等都是线性表。大小为0的表为空表。 3.对于除空表外的任何表...

No Pain No Gain的博客 2410

别再手动调波形了!用STM32G474的HRTIM+DAC生成精密锯齿波,附完整CubeMX配置

本文详细介绍了如何利用STM32G474的高分辨率定时器(HRTIM)和数模转换器(DAC)协同工作,实现高精度锯齿波生成。通过CubeMX配置指南、关键寄存器计算和实践技巧,帮助开发者快速掌握全硬件实现的波形生成方案,显著提升嵌入式系统的波形控制精度和响应速度。

weixin_28716769的博客 246

ReelShort Android 逆向实战:Frida Hook 定位 sign 与 requestTime 算法

一个动态变化的 sign,如何从海量 so 逻辑中精准定位并完整复现?本文以海外短剧 App ReelShort 为例,实战拆解搜索、列表与详情接口的分析过程:从 Charles 抓包锁定关键参数,到 jadx 定位 native 函数,再借助 Frida Hook 验证加密结果;逐步还原 requestTime 的生成机制及 sign 的 HMAC-SHA256 签名逻辑。全文记录关键思路、踩坑与验证方法,带你建立一套可迁移的 Android 接口逆向分析流程。

weixin_64116813的博客 456

数据结构:静态顺序表的实现详解

顺序表是线性表的一种顺序存储结构,它利用一组连续的内存单元依次存储线性表的元素,具有随机访问的特性。静态顺序表通过固定长度的数组实现,长度在初始化后不再动态改变(除非重新定义数组大小),适合预先知道数据规模的场景。

xienda的博客 588

侧杆试验 - 高速撞击 - 显式动力学 - ANSYS Workbench

显式动力学是一种时间积分方法,用于在速度很重要时执行动态模拟。显式动力学考虑快速变化的条件或不连续事件,例如自由落体、高速撞击和施加的负载。由于这些“非线性动力学”已集成到模拟中,因此显式动力学是模拟高度瞬态物理现象的首选。有些侧面碰撞是指车辆侧向撞上路边的坚硬物体,如树木或电线杆。这通常是由于驾驶员失去控制、超速、误判拐角或在湿滑路面上打滑造成的。

jianqimingtian的博客 1289

顺序表的静态存储c语言实现

顺序表的静态存储: 通过数组保存数据,程序分2个源文件和一个头文件: sxb.h包含程序需要用到的函数原型和结构声明,一般类型定义 test.c用来测试程序 sxb.c包含用到的函数实现 test.c: /* 顺序表 */ #include #include #include "sxb.h" //定义SeqList,DataType void Men

ssopp24的博客 1613

架构师之HBase vs MongoDB 技术选型与场景决策实战案例

面对海量数据和高并发查询,该选 HBase 还是 MongoDB?本文为你提供完整的决策框架!从数据模型对比、架构解析、六大真实场景(电信 CDR、金融行情、广告点击流、电商商品、社交档案、内容管理)到性能、一致性、运维全面对比,助你在 PB 级时序数据和灵活查询之间做出精准选择!

肖哥弹架构博客 1099

流体动力学仿真软件:Star-CCM+_(15).用户自定义函数与模型

用户自定义函数(User-Defined Functions, UDFs)允许用户编写自己的函数,并在仿真中调用这些函数。UDFs可以用于定义复杂的边界条件、源项、材料属性等。Star-CCM+支持多种编程语言,包括C++、Fortran和Java等,其中最常用的语言是Java。用户自定义模型(User-Defined Models, UDMs)允许用户在仿真中引入自定义的物理模型。这些模型可以用于描述流体行为、化学反应、多相流等复杂现象。Star-CCM+提供了丰富的API来支持UDMs的开发。

kkchenjj的博客 554

静态顺序表的C语言实现

静态顺序表初始化后容量不可变。

m0_62248701的博客 729

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

C语言之静态,动态顺序表的实现

 在学习了C语言之后,我们知道了数组。那今天我们就用C语言来实现一下顺序表。顺序表是什么呢?顺序表是一种简单的数据结构,他的底层结构就用的数组,他的空间是一段地址连续的空间。SeqList.h#ifndef __SQLLIST_H__ #define __SQLLIST_H__ #include&lt;stdio.h&gt; #include&lt;assert.h&gt; #include&...

叶梓梓的博客分享 368

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

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

C语言实现静态顺序表的实例详解线性表定义一张顺序表也就是在内存中开辟一段连续的存储空间,并给它一个名字进行标识。只有定义了一个顺序表,才能利用该顺序表存放数据元素,也才能对该顺序表进行各种操作。接下来看看静态的顺序表,直接上代码:SeqList.h#define _CRT_SECURE_NO_WARNINGS 1#ifndef __SEQLIST_H__#define __SEQLIST_H__#...

weixin_33936345的博客 153

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

顺序表的实现——静态分配(C语言实现)

顺序表的实现——静态分配

Shitupaoapoa13的博客 453

动态&静态顺序表的C语言实现

静态&动态顺序表的C语言实现

m0_50072238的博客 143
上一篇: 有规律的二维数组中查找一个数
下一篇: c语言实现单链表
Ruichen_L
博客等级 码龄9年 5粉丝 25原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值