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

头文件:

#define _CRT_SECURE_NO_WARNINGS 1
#ifndef _STATICSEQLIST_H__
#define _STATICSEQLIST_H__

#include
#include
#include
#include
#include

#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(; idxsize; ++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; idxsize-1; ++idx)
    {
        seq->array[idx] = seq->array[idx+1];
    }
    seq->size--;
}



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

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

你可能感兴趣的:(数据结构,顺序表,动态顺序表)