首页 > 其他分享 >数据结构:顺序表

数据结构:顺序表

时间:2024-08-27 23:22:21浏览次数:13  
标签:顺序 return int 元素 pseqlist 数据结构 data

目录

结构体

顺序表存储数据类型结构体

 顺序表结构体

函数 

初始化顺序表

判断顺序表是否存满

判断顺序表是否为空

顺序表插入新元素

在指定位置插入新元素

遍历顺序表所有元素,对每个元素完成指定操作

      (指定操作1)  打印所有元素

        (指定操作2)更新指定元素

        (指定操作3)找到指定元素的位置   

删除指定位置的元素

清零顺序表

销毁顺序表


 

结构体

顺序表存储数据类型结构体

typedef int DataType;

 顺序表结构体

typedef struct seqlist
{
    DataType *data;  //存储数据
    int clen;        //顺序表存储的的数据个数
    int tlen;        //顺序表的大小
}Seqlist;

函数 

初始化顺序表

(返回结构体指针)

Seqlist *InitSeqlist(int maxlen)
{
    Seqlist *tmpseqlist=NULL;
//申请顺序表结构体指针
    tmpseqlist=malloc(sizeof(*tmpseqlist));
    if(tmpseqlist==NULL)
    {
        return NULL;
    }
    tmpseqlist->clen=0;
    tmpseqlist->tlen=maxlen;
//申请存储数据的空间
    tmpseqlist->data=malloc(maxlen * sizeof(DataType));
    if(tmpseqlist->data==NULL)
    {
        return NULL;
    }
    return tmpseqlist;
}

判断顺序表是否存满

(存满返回1,没满返回0)

int IsFullSeqlist(Seqlist *pseqlist)
{
    return pseqlist->clen == pseqlist->tlen?1:0;
}

判断顺序表是否为空

(为空返回1,否则0)

int EmptySeqlist(Seqlist *pseqlist)
{
    return pseqlist->clen==0?1:0;
}

顺序表插入新元素

int AppendSeqlist(Seqlist *pseqlist,DataType data)
{
    if(IsFullSeqlist(pseqlist))//判断是否存满,存满则返回-1
    {
        return -1;
    }
    pseqlist->data[pseqlist->clen]=data;
    pseqlist->clen++;
    return 0;
}

在指定位置插入新元素

int PosInsertSeqList(Seqlist *pseqlist,int Pos,DataType data)
{
    int n=0;
    if(IsFullSeqlist(pseqlist))
    {
        return -1;
    }
    for(n=pseqlist->clen;n>Pos;n--)//将指定位置以后的元素都向后挪
    {
        pseqlist->data[n]=pseqlist->data[n-1];
    }
    pseqlist->data[Pos]=data;
    pseqlist->clen++;
    return 0;

}

遍历顺序表所有元素,对每个元素完成指定操作

//pFun是函数指针,指向一个要对元素做什么操作的函数
int ForeachSeqList(Seqlist *pseqlist,int (*pFun)(void *Element,void *arg),void *arg)
{
    int i=0;
    int ret=0;
    for(i=0;i<pseqlist->clen;i++)
    {
        ret=pFun(&pseqlist->data[i],arg);
        if(ret!=0)
        {
            return -1;
        }
    }
    return 0;
}

      (指定操作1)  打印所有元素

int Print(void *Element,void *arg)
{
    int *pData=Element;
    printf("%d  ",*pData);
    return 0;
}

调用语句

printf("元素内容:\n");
    ForeachSeqList(seqlist,Print,NULL); 

        (指定操作2)更新指定元素

        (这里将4更新为60)(也可以用arg传参)

int UpdateFun(void *Element,void *arg)
{
    int *pData=Element;
    if(*pData==4)
    {
        *pData=60;
    }
    return 0;
}

调用语句

  printf("修改元素为4为60\n");
    ForeachSeqList(seqlist,UpdateFun,NULL);

        (指定操作3)找到指定元素的位置   

(这里找元素10)  (也可以用arg传参)

int FindFun(void *Element,void *arg)
{
    int *pData=Element;
    if(*pData==10)
    {
        return 1;
    }
    else
    {
       (*(int *)arg)++;
       printf("(*(int *)arg)=%d\n",(*(int *)arg));
    }
    return 0;
}

调用语句

  printf("查找元素10的位置\n");
    ForeachSeqList(seqlist,FindFun,&n);

//当找到元素后,FindFun返回1,ForeachSeqlist函数检测到返回值不为0,跳出while循环

删除指定位置的元素

int DeleteSeqList(Seqlist *pseqlist,int Pos)
{
    int i=0;
    if(EmptySeqlist(pseqlist))//判断是否为空,为空返回-1
    {
        return -1;
    }
    if(!(Pos>=0&&Pos<pseqlist->clen))//判断位置是否合理
    {
        return -2;
    }
    for(i=Pos;i<pseqlist->clen;i++)//将该位置后面的元素都往前挪
    {
        pseqlist->data[i]=pseqlist->data[i+1];
    }
    pseqlist->clen--;
}

清零顺序表

int ClearSeqList(Seqlist *pseqlist)
{
    pseqlist->clen=0;
    return 0;
}

销毁顺序表

int DestorySeqList(Seqlist **pseqlist)
{
    free((*pseqlist)->data);
    free((*pseqlist));
    *pseqlist=NULL;
    return 0;
}

标签:顺序,return,int,元素,pseqlist,数据结构,data
From: https://blog.csdn.net/m0_64378221/article/details/141611139

相关文章

  • Java数据结构栏目总结
     目录数组与稀疏数组队列:自己用数组模拟Queue环形队列,取模【取余】实现.单链表(LinkList)双向链表(Next、Pre)单向环形链表线性结构数组与稀疏数组稀疏数组,很多0值,可用于压缩特点:共n+1行3列,n为不同值的个数(0除外)第一行:数组的行数、列数、不同值的个数第二行:行......
  • 数据结构——顺序表
    数据结构顺序表基本概念顺序表:顺序存储的线性表。链式表:链式存储的线性表,简称链表。顺序存储就是将数据存储到一片连续的内存中,在C语言环境下,可以是具名的栈数组,或者是匿名的堆数组。存储方式不仅仅只是提供数据的存储空间,而是必须要能体现数据之间的逻辑关系。当采用......
  • 数据结构——链表
    单链表基本概念顺序表:顺序存储的线性表。链式表:链式存储的线性表,简称链表。既然顺序存储中的数据因为挤在一起而导致需要成片移动,那很容易想到的解决方案是将数据离散地存储在不同内存块中,然后在用来指针将它们串起来。这种朴素的思路所形成的链式线性表,就是所谓的链表......
  • 数据结构学习笔记
    李超线段树学习笔记模板传送门从模板题就能看出来嗷,李超线段树非常牛逼。\bx从名字中就能看出来嗷,这玩意儿是个线段树。那么考虑在线段树上维护一堆线(一次函数)。对于每个点,存所有线中,使这个线段$mid$的点的线。对于加入一个点,根节点递归,扫到一个点时,若这个点在$mid$......
  • 算法与数据结构——哈希表
    哈希表哈希表(hashtable),又称散列表,它通过建立键key与值value之间的映射,实现高效的元素查询。具体而言,我们向哈希表中输入一个键key,则可以在O(1)时间内获取对应的值value。除哈希表外,数组和链表也可以实现查询功能,他们的效率对比如下表:添加元素:仅需将元素添加至数组(链表)的尾部......
  • firewalld:富规则的优先级顺序
    一,firewalld的rich规则执行逻辑如下: 1,日志规则2,drop/reject规则3,accept规则二,例子:验证是否先匹配reject规则1,添加两条规则:第一条允许指定ip访问22端口第二条禁止同一个ip访问[root@blog~]#firewall-cmd--add-rich-rule='rulefamily="ipv4"sourceaddress="13.17.12.21......
  • 基于顺序表实现通讯录功能项目
    本文通过顺序表实现通讯录的功能,增删查改数据首先实现顺序表的功能,再用顺序表实现通讯录的功能顺序表中的成员为一个结构体对象con,自定义的类型,里面包含着联系人的姓名性别年龄电话地址seqlist.h:顺序表头文件#pragmaonce#define_CRT_SECURE_NO_WARNINGS1#include<ass......
  • 在array.orderby C#上获得随机顺序
    原文链接:https://cloud.tencent.com/developer/information/%E5%A6%82%E4%BD%95%E5%9C%A8array.orderby%20C%23%E4%B8%8A%E8%8E%B7%E5%BE%97%E9%9A%8F%E6%9C%BA%E9%A1%BA%E5%BA%8F在C#中,要在数组(array)的OrderBy方法中获得随机顺序,可以使用Random类来生成一个随机数作为排序的依据......
  • 算法与数据结构——队列
    队列队列(queue)是一种遵循先入先出规则的线性数据结构。队列模拟了排队现象,即新来的人不断加入队列尾部,而队列头部的人逐个离开。如图所示,我们将队列头部称为“队首”,尾部称为“队尾”,将把元素加入队列尾部的操作称为“入队”,删除队首元素的操作称为“出队”。队列常用操作......
  • 【数据结构】二叉树的顺序结构,详细介绍堆以及堆的实现,堆排序
    目录1.二叉树的顺序结构2.堆的概念及结构3.堆的实现3.1堆的结构3.2堆的初始化3.3堆的插入 3.4堆的删除3.5获取堆顶数据3.6堆的判空3.7堆的数据个数3.8堆的销毁4.堆的应用4.1堆排序4.1.1向下调整建堆的时间复杂度 4.1.2向上调整建堆的时间复杂......