您的位置:首页 > 其它

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

2017-04-24 11:50 330 查看
头文件:

#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");
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息