靜態順序表和動態順序表 對比
靜態順序表的缺陷:
靜態順序表顯然就是裡面的記憶體是一定的,不能改變的,所以定義的時候可以定義一個巨集,然後定義一個陣列,這樣就可以在陣列中儲存資訊,而且,還可以隨時改變陣列的大小。
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;
相關文章
- CMake和靜態庫順序
- 順序表
- 順序表應用5:有序順序表歸併
- 順序表應用6:有序順序表查詢
- 第2章 順序表及其順序儲存
- 順序表應用8:最大子段和之動態規劃法動態規劃
- DS靜態查詢之順序查詢
- 靜態連結動態連結的連結順序問題和makefile示例
- 線性表的順序儲存-順序表,對“突然的自我”的否定,對自我的揚棄
- 順序表的學習
- 順序表的實現
- Java實現順序表Java
- 順序表的堆排序排序
- 順序表有序插入資料
- DS順序表--類實現
- Java初始化靜態變數的時間順序Java變數
- 資料結構 - 線性表 - 順序表資料結構
- c運算子優先順序表-最全c語言運算子優先順序和結合性對照表C語言
- 順序表實現二分排序排序
- 考研資料結構-線性表-順序表資料結構
- 線性表-順序表C語言實現C語言
- 順序控制和狀態機之間的差別
- 線性表的使用——順序實現
- 隨筆:MySQL 普通3表join順序MySql
- C++ 運算子優先順序表C++
- 連結串列,樹,順序表操縱
- 線性表之順序儲存結構
- python運算子及優先順序順序Python
- nginx的location匹配順序、優先順序,location對映衝突排查Nginx
- 5-順序表查詢及插入問題
- Script載入順序 & 外部樣式表的阻塞
- 第3章 順序表的鏈式儲存
- 11 線性表的順序儲存結構
- 資料結構與演算法 | 線性表 —— 順序表資料結構演算法
- 資料結構實驗一:順序表的建立與操作實現、順序表實現約瑟夫環問題資料結構
- SpringBoot配置檔案優先順序載入順序Spring Boot
- Linux執行時動態庫搜尋路徑優先順序Linux
- 資料結構_順序表_順序表的初始化、插入、刪除、修改、查詢列印(基於C語言實現)資料結構C語言
- UML順序圖