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

来源:互联网 发布:windows 10更新 编辑:程序博客网 时间:2024/05/17 05:59

头文件:

#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 10typedef int DataType;//#define DataType inttypedef 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");}
0 0