資料結構 動態順序表

2021-09-27 10:43:06 字數 3729 閱讀 8349

在說順序表之前我們先來了解一下線性表, 線性表就是n個型別相同的資料元素的有限序列.線性表在邏輯上是線性的結構, 可以理解為一條直線, 但是在物理上不一定是連續的, 物理上通常是以陣列和鏈式結構形式儲存

比如:

順序表是用一段實體地址連續的儲存單元依次儲存資料元素的線性結構,一般情況下採用陣列儲存。在陣列上完成資料的增刪查改

1. 靜態順序表使用定長的陣列儲存, 但是靜態的順序表是存在棧上的, 但是一般情況下棧只有幾m的大小, 如果我們開小了不夠用, 但是開的很大可能就沒有辦法用了, 可能會造成棧溢位, 所以我們並不推薦使用靜態的.2. 動態順序表

在堆上開闢空間, 根據我們自己所需要的大小來分配, 相較於靜態順序表更加的靈活一點, 一般情況下使用的都是順序表

主要實現 : 增刪改查, 大小, 列印, 思路都非常簡單, 我都寫在注釋裡了在這裡演示一下增加和刪除增加:

刪除:

動態順序表.h
#pragma once

#include #include #include #include typedef int datatype;

typedef struct seqlist

seqlist;

//初始化

void seqlistinit(seqlist* s);

//銷毀

void seqlistdestory(seqlist* s);

//檢查容量

void seqlistcheck(seqlist* s);

//增刪改查

//頭插尾插

void seqlistpushback(seqlist* s, datatype data);

void seqlistpushfront(seqlist* s, datatype data);

//任意位置插入

void seqlistinsert(seqlist* s, size_t pos, datatype data);

//頭刪尾刪

void seqlistpopfront(seqlist* s);

void seqlistpopback(seqlist* s);

//任意位置刪除

void seqlisterase(seqlist* s, size_t pos);

//刪除值為所有data的元素

void seqlistremoveall(seqlist* s, datatype data);

//修改

void seqlistmodify(seqlist* s, size_t pos, datatype data);

//查詢

void seqlistfind(seqlist* s, datatype data);

//列印順序表

void seqlistprint(seqlist* s);

//列印大小

void seqlistsize(seqlist* s);

//排序

void seqlistbubblesort(seqlist* s);

test.c
#include "動態順序表.h"

//初始化

void seqlistinit(seqlist* s)

//銷毀

void seqlistdestory(seqlist* s)

}//增刪改查

//頭插尾插

void seqlistpushfront(seqlist* s, datatype data)

s->_array[0] = data;

s->_size++;

}void seqlistpushback(seqlist* s, datatype data)

//任意位置插入

void seqlistinsert(seqlist* s, size_t pos, datatype data)

s->_array[pos - 1] = data;

s->_size++;

}//檢查容量

void seqlistcheck(seqlist* s)

}//頭刪尾刪

void seqlistpopfront(seqlist* s)

s->_size--;

}void seqlistpopback(seqlist* s)

//任意位置刪除

void seqlisterase(seqlist* s, size_t pos)

s->_size--;

}//刪除值為所有data的元素

void seqlistremoveall(seqlist* s, datatype data)

s->_size = index;

}//二分查詢

void seqlistfind(seqlist* s, datatype data)

} if (flag == -1)

printf("%d is not exits\n", data);

else

printf("%d is exits, number is %d\n", data, flag);

}//氣泡排序

void seqlistbubblesort(seqlist* s)

} //有可能沒有排序完已經有序, 直接終止

if (flag == 0)

break; }}

//修改

void seqlistmodify(seqlist* s, size_t pos, datatype data)

//列印

void seqlistprint(seqlist* s)

printf("\n");

}//返回大小

void seqlistsize(seqlist* s)

printf("size is %d\n", count);

}

main.c
#include "動態順序表.h"

資料結構 動態順序表

pragma once include include includetypedef int datatype typedef struct seqlist seqlist,psseqlist void seqlistinit psseqlist ps,int capacity 初始化鍊錶 void...

資料結構 動態順序表

大家有沒有發現上次靜態順序表有一定的缺陷,它會浪費很多的空間,比如我們只有10個元素但我們申請元素申請100個,這樣我們會浪費90個空間,而動態順序表我們插入多少個我們就申請多少個,大大的節省了我們大的空間。首先我們來看看動態順序表的結構 typedef struct deqlist deqlist...

資料結構 順序表

順序表的特徵 1由唯一的表名標識 2佔據一塊連續的儲存空間 3資料順序存放,元素之間有先後關係 定義動態的順序表 define maxsize 100 typedef struct sqlist 這個結構體型別存放的是順序表的資訊和順序表的資料 初始化順序表 void initsqlist sqli...