数据结构(二)--顺序表与链表

一、顺序表

        顺序表是逻辑线性,存储线性的表结构。连续存储在构造元素结构体中是利用数组实现。同时,定义元素结构体时定义元素下标。

1、定义元素的结构体

#include <stdio.h>
#define data_t int
#define SIZE 128
typedef struct list
{
    data_t data[SIZE];//顺序表通过数组实现连续存储
    int inode;//定义顺序表的元素的下标
}LIST;

int main(void)
{
    return 0;
}

2、顺序表开辟空间

//顺序表开辟空间
#include <stdlib.h>
#include <strings.h>
LIST * createSeqlist(void)
{
    LIST * p = (LIST *)malloc(sizeof(LIST));//malloc函数的作用是在堆区开辟空间
    if(NULL == P)                           //malloc函数的头文件为#include <stdlib.h>
    {
        return NULL;//函数出错时指针类型返回NULL
    }
    bzero(p->data,sizeof(p->data));//bzero函数的作用清空数组内容,头文件为#include <strings.h>
    p->inode = -1;//记录最后一个元素的下标,-1表示表空
    return p; //返回结构体指针类型   
    
}

3、顺序表判满

//顺序表判空
int seqlistIsFull(LIST *p)
{
    if(NULL != p)
    return ((p->inode+1 == SIZE) ? 1 : 0);//因为当表满时,最后一个元素的下标为SIZE-1.返回类型为                                                                     
    else                                  //整形,表满则返回1,不满返回0
    return -1;
}    

4、顺序表判空

//顺序表判空
int seqlistIsEmpty(LIST *p)
{
    if(NULL != p)
    return (p->inode == -1 ? 1 : 0);//当表空时,顺序表没有元素,最后一个元素的下标为-1。返回类型                
    else                            //也为int型,表空返回1,表不空返回0
    return -1;
}    

5、计算表中元素个数

//计算表中元素个数
int getSeqlistLength(LIST *p)
{
    if(NULL == p)
    return -1;
    else
    return (p->inode+1);//最后一个元素下标+1就是顺序表的元素个数
}

6、顺序表添加元素

int insertSeqlistByPos(LIST *p,int pos,data_t data)
{
    //顺序表判满,若满则无法添加元素,程序退出
    if(seqlistIsFull(p))
    return -1;
    /*判断元素添加位置的合法性,若位置小于0号位置或者大于表长(可以在最后一个元素后面添加位置,所以    
    位置上限是最后一个元素后一个位置即表长),则无法添加元素,退出程序*/
    int len = getSeqlistLength(P)
    if(pos<0 || pos >len)
    return -1;
    /*从最后一个元素开始循环往右移,原来pos位置的元素当然也要往右移所以for循环判断取等号,最后将    
    data赋给pos位置的元素值*/
    for(int i=len-1;i>=pos;i--)
    {
        p->data[i+1] = p->data[i];
        p->data[pos] = data;
    }
    /*添加元素成功后,最后一个元素下标加一*/
    p->inode++;
    return 0;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

丿浩子不是耗子

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值