动态顺序表(可扩容)的基本操作

本文介绍了一个使用C语言实现的动态顺序表数据结构。该数据结构支持动态调整大小,并提供了初始化、元素插入、删除等基本操作。文章详细展示了每种操作的具体实现过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

头文件:

#define _CRT_SECURE_NO_WARNINGS 1
#ifndef _STATICSEQLIST_H__
#define _STATICSEQLIST_H__

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

#define MAXSIZE 10
#define CAPACITYSIZE 10

typedef int DataType;
//#define DataType int

typedef struct Node
{
    DataType *array;
    DataType size;
    DataType capacity;
}SeqlistD,*PSeqlistD;

void InitSeqlistD(PSeqlistD seq);
void PushBack(PSeqlistD seq,DataType data);
void PrintSeqlist(PSeqlistD seq);
void PopBack(PSeqlistD seq);
void PushFront(PSeqlistD seq,DataType data);
void PopFront(PSeqlistD seq);
void Insert(PSeqlistD seq,DataType pos,DataType data);
void Erase(PSeqlistD seq,DataType pos);
oid PopBack(PSeqlist seq);

#endif //_STATICSEQLIST_H__

顺序表实现的代码

#include"SeqlistD.h"
void InitSeqlistD(PSeqlistD seq)   //初始化动态顺序表
{
    assert(seq);
    seq->array = (DataType*)malloc(CAPACITYSIZE*sizeof(DataType));
    assert(seq->array);
    seq->size = 0;
    seq->capacity = CAPACITYSIZE;
}
int CheckCapacity(PSeqlistD seq)    //检查容量
{
    assert(seq);
    if(seq->size ==seq->capacity)
    {
        DataType *ptmp = (DataType*)malloc((CAPACITYSIZE+seq->capacity)*sizeof(DataType));
        if(ptmp ==NULL)
        {
            return 0;
        }
        seq->array = ptmp;
        seq->capacity += CAPACITYSIZE;
    }
    return 1;
}
void PushBack(PSeqlistD seq,DataType data)     //后插动态顺序表
{
    assert(seq);
    if(CheckCapacity(seq))
    {
        seq->array[seq->size++] = data;
    }
}

void PopBack(PSeqlistD seq)
{
    assert(seq);
    if(seq->size == 0)
    {
        return;
    }
    seq->size--;
}

void PushFront(PSeqlistD seq,DataType data)     //前插动态顺序表
{
    DataType idx = 0;
    assert(seq);
    if(CheckCapacity(seq))
    {
        for(idx=seq->size; idx>0; --idx)
        {
            seq->array[idx] = seq->array[idx-1];
        }
        seq->array[0] = data;
    }
}

void PopFront(PSeqlistD seq)
{
    DataType idx = 0;
    assert(seq);
    for(; idx<seq->size; ++idx)
    {
        seq->array[idx] = seq->array[idx+1];
    }
    seq->size--;
}

void Insert(PSeqlistD seq,DataType pos,DataType data)   //动态顺序表任意位置插入
{
    DataType idx = 0;
    assert(seq);
    for(idx = seq->size-1; idx>=pos; --idx)
    {
        seq->array[idx+1] = seq->array[idx];
    }
    seq->array[pos] = data;
    seq->size++;
}

void Erase(PSeqlistD seq,DataType pos)
{
    DataType idx = 0;
    assert(seq);
    for(idx=pos; idx<seq->size-1; ++idx)
    {
        seq->array[idx] = seq->array[idx+1];
    }
    seq->size--;
}



void PrintSeqlist(PSeqlistD seq)   //打印顺序表
{
    int idx = 0;

    assert(seq);
    for(; idx<seq->size; ++idx)
    {
        printf("%d ",seq->array[idx]);
    }
    printf("\n");
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值