国产精品天干天干,亚洲毛片在线,日韩gay小鲜肉啪啪18禁,女同Gay自慰喷水

歡迎光臨散文網(wǎng) 會(huì)員登陸 & 注冊(cè)

順序表(順序存儲(chǔ)結(jié)構(gòu))是什么

2023-07-10 16:08 作者:解學(xué)武  | 我要投稿

順序表又稱(chēng)順序存儲(chǔ)結(jié)構(gòu),是線性表的一種,專(zhuān)門(mén)存儲(chǔ)邏輯關(guān)系為“一對(duì)一”的數(shù)據(jù)。

順序表存儲(chǔ)數(shù)據(jù)的具體實(shí)現(xiàn)方案是:將數(shù)據(jù)全部存儲(chǔ)到一整塊內(nèi)存空間中,數(shù)據(jù)元素之間按照次序挨個(gè)存放。

舉個(gè)簡(jiǎn)單的例子,將 {1,2,3,4,5} 這些數(shù)據(jù)使用順序表存儲(chǔ),數(shù)據(jù)最終的存儲(chǔ)狀態(tài)如下圖所示:

圖 1 順序存儲(chǔ)結(jié)構(gòu)示意圖

順序表的建立

使用順序表存儲(chǔ)數(shù)據(jù),除了存儲(chǔ)數(shù)據(jù)本身的值以外,通常還會(huì)記錄以下兩樣數(shù)據(jù):

  • 順序表的最大存儲(chǔ)容量:順序表最多可以存儲(chǔ)的數(shù)據(jù)個(gè)數(shù);

  • 順序表的長(zhǎng)度:當(dāng)前順序表中存儲(chǔ)的數(shù)據(jù)個(gè)數(shù)。

C 語(yǔ)言中,可以定義一個(gè)結(jié)構(gòu)體來(lái)表示順序表:

typedef struct{

? ? int * head; //定義一個(gè)名為head的長(zhǎng)度不確定的數(shù)組,也叫“動(dòng)態(tài)數(shù)組”

? ? int length; //記錄當(dāng)前順序表的長(zhǎng)度

? ? int size; //記錄順序表的存儲(chǔ)容量

}Table;


嘗試建立一個(gè)順序表,例如:

#define Size 5 //對(duì)Size進(jìn)行宏定義,表示順序表的最大容量

void initTable(Table * t) {

? ? //構(gòu)造一個(gè)空的順序表,動(dòng)態(tài)申請(qǐng)存儲(chǔ)空間

? ? t->head = (int*)malloc(Size * sizeof(int));

? ? //如果申請(qǐng)失敗,作出提示并直接退出程序

? ? if (!t->head)

? ? {

? ? ? ? printf("初始化失敗");

? ? ? ? exit(0);

? ? }

? ? //空表的長(zhǎng)度初始化為0

? ? t->length = 0;

? ? //空表的初始存儲(chǔ)空間為Size

? ? t->size = Size;

}

如上所示,整個(gè)建立順序表的過(guò)程都封裝在一個(gè)函數(shù)中,建好的順序表可以存儲(chǔ) 5 個(gè)邏輯關(guān)系為“一對(duì)一”的整數(shù)。

通常情況下,malloc() 函數(shù)都可以成功申請(qǐng)內(nèi)存空間,當(dāng)申請(qǐng)失敗時(shí),示例程序中進(jìn)行了“輸出失敗信息和強(qiáng)制程序退出”的操作,您可以根據(jù)實(shí)際需要修改代碼。

順序表的使用

通過(guò)調(diào)用 initTable() 函數(shù),就可以成功地創(chuàng)建一個(gè)順序表,還可以往順序表中存儲(chǔ)一些元素。

例如,將 {1,2,3,4,5} 存儲(chǔ)到順序表中,實(shí)現(xiàn)代碼如下:

#include <stdio.h>

#include <stdlib.h>

#define Size 5 //對(duì)Size進(jìn)行宏定義,表示順序表的最大容量

typedef struct{

? ? int* head;

? ? int length;

? ? int size;

}Table;

void initTable(Table * t) {

? ? //構(gòu)造一個(gè)空的順序表,動(dòng)態(tài)申請(qǐng)存儲(chǔ)空間

? ? t->head = (int*)malloc(Size * sizeof(int));

? ? //如果申請(qǐng)失敗,作出提示并直接退出程序

? ? if (!t->head)

? ? {

? ? ? ? printf("初始化失敗");

? ? ? ? exit(0);

? ? }

? ? //空表的長(zhǎng)度初始化為0

? ? t->length = 0;

? ? //空表的初始存儲(chǔ)空間為Size

? ? t->size = Size;

}

//輸出順序表中元素的函數(shù)

void displayTable(Table t) {

? ? int i;

? ? for (i = 0; i < t.length; i++) {

? ? ? ? printf("%d ", t.head[i]);

? ? }

? ? printf("\n");

}

int main() {

? ? int i;

? ? Table t = { NULL,0,0 };

? ? initTable(&t);

? ? //向順序表中添加{1,2,3,4,5}

? ? for (i = 1; i <= Size; i++) {

? ? ? ? t.head[i - 1] = i;

? ? ? ? t.length++;

? ? }

? ? printf("順序表中存儲(chǔ)的元素分別是:\n");

? ? displayTable(t);

? ? free(t.head);//釋放申請(qǐng)的堆內(nèi)存

? ? return 0;

}

程序運(yùn)行結(jié)果如下:

順序表中存儲(chǔ)的元素分別是:
1 2 3 4 5

順序表(順序存儲(chǔ)結(jié)構(gòu))是什么的評(píng)論 (共 條)

分享到微博請(qǐng)遵守國(guó)家法律
克东县| 息烽县| 乐亭县| 上林县| 普宁市| 武清区| 琼结县| 会理县| 南皮县| 勐海县| 荣成市| 西贡区| 自贡市| 洛隆县| 庆阳市| 南溪县| 新河县| 云浮市| 灵台县| 宁远县| 金昌市| 彰化市| 汕尾市| 靖州| 凯里市| 荔波县| 河池市| 乐昌市| 南投市| 互助| 安新县| 南江县| 葵青区| 延庆县| 玉田县| 镇宁| 台北县| 广元市| 渝中区| 收藏| 凉城县|