静态顺序表和动态顺序表 对比

静态顺序表的缺陷:

静态顺序表显然就是里面的内存是一定的,不能改变的,所以定义的时候可以定义一个宏,然后定义一个数组,这样就可以在数组中存储信息,而且,还可以随时改变数组的大小。

typedef int DataType;
#define MaxSize 10

typedef struct SeqList
{
    DataType array[MaxSize];
    size_t size;   // 有效数据元素的个数
}SeqList;

这里写图片描述

不过,这样的情况不安全,因为,每个人都可以改变的数组的大小,这是宏定义的缺陷,也是静态顺序表的缺陷。
下面是顺序表的各种功能实现:
http://blog.csdn.net/jhcconan614/article/details/53869920

动态顺序表

typedef struct strSeqList{
    DateType * array;
    size_t size;
    siz_t capacity;
}SeqList,*pSeqList;

这里写图片描述

头文件:

#include <stdio.h>  
#include <stdlib.h>   
#include <malloc.h>  
#include <assert.h> 

typedef int DataType;  
typedef unsigned size_t; 

typedef struct SeqList_D  {  
 DataType* array;          //指向数据块的指针           
 size_t size;              //当前数据数  
 size_t capacity;          //总容量           
}SeqList_D;  

void InitSeqList_D(SeqList_D* pseq_d);  //初始化函数
int IsFullCapacity(SeqList_D* pseq_d);  //判满函数
int IsEmptyCapacity(SeqList_D* pseq_d);  //判空函数
void PushBack(SeqList_D* pseq_d,DataType data);//尾插函数  
void PopBack(SeqList_D* pseq_d);  //尾删函数
void PrintSeq(SeqList_D* pseq_d); //打印函数

函数部分:

#include "SeqList_D.h"  

void InitSeqList_D(SeqList_D* pseq_d)  
{  
 assert(pseq_d);  
 pseq_d->array = (DataType*)malloc(sizeof(DataType) * 3);  
 pseq_d->size = 0;  
 pseq_d->capacity = 3;  
}  

void PushBack(SeqList_D* pseq_d,DataType data)  
{  
    assert(pseq_d);  
    if(IsFullCapacity(pseq_d))//full  
    {  
        pseq_d->capacity = pseq_d->capacity * 2 + 3;  
        pseq_d->array = (DataType*)realloc(pseq_d->array, sizeof(DataType) * pseq_d->capacity);  
    }  
    pseq_d->array[pseq_d->size++] = data;  
}

int IsFullCapacity(SeqList_D* pseq_d)  
{  
 if(pseq_d->size >= pseq_d->capacity)  
 {  
  return 1;   //full  
 }  
 else  
 {  
  return 0;    
 }  
}

int IsEmptyCapacity(SeqList_D* pseq_d)  
{  
 if(pseq_d->size <= 0)  
 {  
  return 1;   //empty  
 }  
 else  
  return 0;  
} 

void PopBack(SeqList_D* pseq_d)  
{  
 if(IsEmptyCapacity)  
 {  
  printf("SeqList is Eempty");  
  return;  
 }  
 else  
 {  
  pseq_d->size--;  
 }  
}  

void PrintSeq(SeqList_D* pseq_d)  
{  
 int i = 0;  
 for(;i < pseq_d->size; i++)  
 {  
  printf("%d->", pseq_d->array[i]);  
 }  
}    

测试函数:

#include "SeqList_D.h"  

void text1()  
{  
 SeqList_D s1;  
 InitSeqList_D(&s1);  
 PushBack(&s1, 1);  
 PushBack(&s1, 2);  
 PushBack(&s1, 3);  
 PushBack(&s1, 4);  
 PushBack(&s1, 5);  
 PrintSeq(&s1);  
}  

int main()  
{  
 text1();  
 system("pause");  
 return 0;
  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值