国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

【數(shù)據(jù)結(jié)構(gòu)】順序表的定義和運(yùn)算

這篇具有很好參考價(jià)值的文章主要介紹了【數(shù)據(jù)結(jié)構(gòu)】順序表的定義和運(yùn)算。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

【數(shù)據(jù)結(jié)構(gòu)】順序表的定義和運(yùn)算,數(shù)據(jù)結(jié)構(gòu)與算法,數(shù)據(jù)結(jié)構(gòu),筆記,學(xué)習(xí)方法,青少年編程,改行學(xué)it,c語(yǔ)言,c++

目錄

1.初始化

2.插入

3.刪除

4.查找

5.修改

6.長(zhǎng)度

7.遍歷

8.完整代碼


??嗨!我是Filotimo__??。很高興與大家相識(shí),希望我的博客能對(duì)你有所幫助。

??本文由Filotimo__??原創(chuàng),首發(fā)于CSDN??。

??如需轉(zhuǎn)載,請(qǐng)事先與我聯(lián)系以獲得授權(quán)??。

??歡迎大家給我點(diǎn)贊??、收藏??,并在留言區(qū)??與我互動(dòng),這些都是我前進(jìn)的動(dòng)力!

??我的格言:森林草木都有自己認(rèn)為對(duì)的角度??。

【數(shù)據(jù)結(jié)構(gòu)】順序表的定義和運(yùn)算,數(shù)據(jù)結(jié)構(gòu)與算法,數(shù)據(jù)結(jié)構(gòu),筆記,學(xué)習(xí)方法,青少年編程,改行學(xué)it,c語(yǔ)言,c++

【數(shù)據(jù)結(jié)構(gòu)】順序表的定義和運(yùn)算,數(shù)據(jù)結(jié)構(gòu)與算法,數(shù)據(jù)結(jié)構(gòu),筆記,學(xué)習(xí)方法,青少年編程,改行學(xué)it,c語(yǔ)言,c++

在C語(yǔ)言中,線性表的順序存儲(chǔ)結(jié)構(gòu)可以使用數(shù)組來(lái)實(shí)現(xiàn)。順序表是一種將元素按照順序存儲(chǔ)在連續(xù)的存儲(chǔ)空間中的線性結(jié)構(gòu)。

順序表可以使用結(jié)構(gòu)體來(lái)定義,例如:

#define MAXSIZE 100  // 線性表的最大長(zhǎng)度

typedef struct {
    int data[MAXSIZE];  // 存儲(chǔ)線性表元素的數(shù)組
    int length;         // 當(dāng)前線性表長(zhǎng)度
} List;

以下是順序表的基本運(yùn)算:

1.初始化

初始化一個(gè)空的順序表:

void initList(List *L) {
    L->length = 0;
}

L:指向順序表的指針。

將順序表的長(zhǎng)度length賦值為0,相當(dāng)于清空了順序表,使得順序表L中不再有任何元素。

2.插入

在某個(gè)位置插入一個(gè)元素,使得該位置原來(lái)的元素和之后的元素往后移動(dòng):

int listInsert(List *L, int i, int elem) {
    int j;
    if (i < 1 || i > L->length + 1) {
        return 0; // 越界
    }
    if (L->length >= MAXSIZE) {
        return 0; // 線性表已滿
    }
    for (j = L->length; j >= i; j--) {
        L->data[j] = L->data[j-1];
    }
    L->data[i-1] = elem;
    L->length++;
    return 1;
}

函數(shù)的目的是將一個(gè)元素elem插入到順序表L的第i個(gè)位置。

i:要插入的位置

elem:要插入的元素的值

代碼的邏輯:

(1)判斷要插入的位置i是否越界,即是否小于1或大于線性表的長(zhǎng)度加1。如果越界則返回0,表示失敗。

(2)判斷順序表L是否已滿,即順序表的長(zhǎng)度是否達(dá)到了最大容量MAXSIZE。如果已滿則返回0,表示失敗。

(3)通過(guò)一個(gè)循環(huán),將從位置i開(kāi)始的元素都向后移動(dòng)一位,為要插入的元素留出空位。

(4)將要插入的元素elem賦值給位置i-1的元素。

(5)增加順序表的長(zhǎng)度。

(6)返回1,表示插入成功。

3.刪除

刪除某個(gè)位置的元素,使得該位置后面的元素往前移動(dòng):

int listDelete(List *L, int i) {
    int j;
    if (i < 1 || i > L->length) {
        return 0; // 越界
    }
    for (j = i; j < L->length; j++) {
        L->data[j-1] = L->data[j];
    }
    L->length--;
    return 1;
}

i:要?jiǎng)h除的元素的位置

代碼的邏輯:

(1) 判斷要?jiǎng)h除的位置i是否越界,即是否小于1或大于順序表的長(zhǎng)度。如果越界則返回0,表示失敗。

(2)通過(guò)一個(gè)循環(huán),將從位置i+1開(kāi)始的元素都向前移動(dòng)一位,覆蓋了要被刪除的元素。

(3)減少順序表的長(zhǎng)度。

(4)返回1,表示刪除成功。

4.查找

根據(jù)值或位置查找一個(gè)元素:

int locateElem(List *L, int elem) {
    int i;
    for (i = 0; i < L->length; i++) {
        if (L->data[i] == elem) {
            return i+1;
        }
    }
    return 0; // 沒(méi)找到
}

elem:要查找的元素的值

代碼的邏輯:

(1)通過(guò)一個(gè)循環(huán),遍歷順序表L中的每個(gè)元素。

(2)在循環(huán)中,判斷當(dāng)前元素是否等于要查找的元素elem。如果相等,則返回當(dāng)前元素的位置(即i+1)。

(3)如果循環(huán)結(jié)束還沒(méi)有找到相等的元素,則返回0,表示沒(méi)有找到。

5.修改

根據(jù)位置修改某個(gè)元素的值:

int setElem(List *L, int i, int elem) {
    if (i < 1 || i > L->length) {
        return 0; // 越界
    }
    L->data[i-1] = elem;
    return 1;
}

?i:要設(shè)置元素的位置

-elem:要設(shè)置的新值

代碼的邏輯:

(1)判斷要設(shè)置的位置i是否越界,即是否小于1或大于線性表的長(zhǎng)度。如果越界則返回0,表示失敗。

(2)將線性表L的第i個(gè)位置的元素值設(shè)置為elem。

(3)返回1,表示設(shè)置成功。

6.長(zhǎng)度

返回順序表的長(zhǎng)度:

int listLength(List *L) {
    return L->length;
}

直接返回順序表L的長(zhǎng)度L->length。

7.遍歷

依次訪問(wèn)順序表中的每個(gè)元素:

void traverseList(List *L) {
    int i;
    for (i = 0; i < L->length; i++) {
        printf("%d ", L->data[i]);
    }
    printf("\n");
}

代碼的邏輯:

(1)通過(guò)一個(gè)循環(huán),遍歷順序表L中的每個(gè)元素。

(2)在循環(huán)中,使用printf函數(shù)依次將每個(gè)元素的值輸出到屏幕上,并在元素之間添加一個(gè)空格。

(3)在循環(huán)結(jié)束后,輸出一個(gè)換行符,以便下一行輸出。

8.完整代碼

這里順序表中的元素均設(shè)為 int 類型:

#include <stdio.h>

#define MAXSIZE 100  // 線性表的最大長(zhǎng)度

typedef struct {
    int data[MAXSIZE];  // 存儲(chǔ)線性表元素的數(shù)組
    int length;         // 當(dāng)前線性表長(zhǎng)度
} List;

// 初始化線性表
void initList(List *L) {
    L->length = 0;
}

// 在第 i 個(gè)位置插入元素 elem
int listInsert(List *L, int i, int elem) {
    int j;
    if (i < 1 || i > L->length + 1) {
        return 0; // 越界
    }
    if (L->length >= MAXSIZE) {
        return 0; // 線性表已滿
    }
    for (j = L->length; j >= i; j--) {
        L->data[j] = L->data[j-1];
    }
    L->data[i-1] = elem;
    L->length++;
    return 1;
}

// 刪除第 i 個(gè)元素
int listDelete(List *L, int i) {
    int j;
    if (i < 1 || i > L->length) {
        return 0; // 越界
    }
    for (j = i; j < L->length; j++) {
        L->data[j-1] = L->data[j];
    }
    L->length--;
    return 1;
}

// 查找第一個(gè)等于 elem 的元素
int locateElem(List *L, int elem) {
    int i;
    for (i = 0; i < L->length; i++) {
        if (L->data[i] == elem) {
            return i+1;
        }
    }
    return 0; // 沒(méi)找到
}

// 返回第 i 個(gè)元素的值
int getElem(List *L, int i) {
    if (i < 1 || i > L->length) {
        return 0; // 越界
    }
    return L->data[i-1];
}

// 修改第 i 個(gè)元素的值為 elem
int setElem(List *L, int i, int elem) {
    if (i < 1 || i > L->length) {
        return 0; // 越界
    }
    L->data[i-1] = elem;
    return 1;
}

// 返回線性表的長(zhǎng)度
int listLength(List *L) {
    return L->length;
}

// 遍歷線性表
void traverseList(List *L) {
    int i;
    for (i = 0; i < L->length; i++) {
        printf("%d ", L->data[i]);
    }
    printf("\n");
}

int main() {
    List L;
    initList(&L);
    listInsert(&L, 1, 1);
    listInsert(&L, 2, 2);
    listInsert(&L, 3, 3);
    printf("插入 1, 2, 3 后的線性表:");
    traverseList(&L);  // 打印:1 2 3
    listDelete(&L, 2);
    printf("刪除第 2 個(gè)元素后的線性表:");
    traverseList(&L);  // 打?。? 3

    int elem = getElem(&L, 2);
    printf("第 2 個(gè)元素的值為%d\n", elem);  // 打印:第 2 個(gè)元素的值為3
    setElem(&L, 1, 4);
    printf("修改第 1 個(gè)元素的值為 4 后的線性表:");
    traverseList(&L);  // 打?。? 3
    printf("線性表的長(zhǎng)度為 %d\n", listLength(&L)); // 打?。壕€性表的長(zhǎng)度為 2
    int pos = locateElem(&L, 3);
    if (pos) {
        printf("元素 3 的下標(biāo)為 %d\n", pos);  // 打印:元素 3 的下標(biāo)為 2
    } else {
        printf("元素 3 沒(méi)有找到\n");
    }
    return 0;
}

輸出結(jié)果如下:

【數(shù)據(jù)結(jié)構(gòu)】順序表的定義和運(yùn)算,數(shù)據(jù)結(jié)構(gòu)與算法,數(shù)據(jù)結(jié)構(gòu),筆記,學(xué)習(xí)方法,青少年編程,改行學(xué)it,c語(yǔ)言,c++文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-753135.html

到了這里,關(guān)于【數(shù)據(jù)結(jié)構(gòu)】順序表的定義和運(yùn)算的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 數(shù)據(jù)結(jié)構(gòu)中: 一元多項(xiàng)式的運(yùn)算(相加,相減,相乘)------用C語(yǔ)言 / C++來(lái)實(shí)現(xiàn)。 數(shù)據(jù)結(jié)構(gòu)線性表的操作和應(yīng)用(順序存儲(chǔ))

    數(shù)據(jù)結(jié)構(gòu)中: 一元多項(xiàng)式的運(yùn)算(相加,相減,相乘)------用C語(yǔ)言 / C++來(lái)實(shí)現(xiàn)。 數(shù)據(jù)結(jié)構(gòu)線性表的操作和應(yīng)用(順序存儲(chǔ))

    線性表的操作和應(yīng)用(順序存儲(chǔ))。用順序存儲(chǔ)實(shí)現(xiàn)一元多項(xiàng)式,并進(jìn)行加、減、乘運(yùn)算。 (1)一元多項(xiàng)式結(jié)構(gòu)體創(chuàng)建? (2)初始化 (3)一元多項(xiàng)式賦值? ? ? ? ? ? ?(4)打印一元多項(xiàng)式 (5)加法運(yùn)算? ? ? ? ? ? ? ? ? ? ? ? (6)減法運(yùn)算 (7)乘法運(yùn)算 ? ?全部代

    2024年02月01日
    瀏覽(98)
  • 【數(shù)據(jù)結(jié)構(gòu)與算法】二、線性表的順序表示【硬核】

    【數(shù)據(jù)結(jié)構(gòu)與算法】二、線性表的順序表示【硬核】

    圖書(shū)表的順序存儲(chǔ)結(jié)構(gòu)類型定義: 在調(diào)用函數(shù)的過(guò)程中,當(dāng)形參為引用類型時(shí),實(shí)參和形參占用了相同的空間 2.4.1 線性表的基本操作: 2.4.2 線性表L的初始化 2.4.3 銷毀和清空線性表L 2.4.4 求線性表L的長(zhǎng)度以及判斷線性表L是否為空 2.4.5 順序表的取值(根據(jù)位置i獲取相應(yīng)位置

    2023年04月26日
    瀏覽(29)
  • 【數(shù)據(jù)結(jié)構(gòu)】:實(shí)現(xiàn)順序表各種基本運(yùn)算的算法

    【數(shù)據(jù)結(jié)構(gòu)】:實(shí)現(xiàn)順序表各種基本運(yùn)算的算法

    領(lǐng)會(huì)順序表存儲(chǔ)結(jié)構(gòu)和掌握順序表中各種基本運(yùn)算算法設(shè)計(jì)。 編寫(xiě)一個(gè)程序sqlist.cpp,實(shí)現(xiàn)順序表的各種基本運(yùn)算和整體建表算法(假設(shè)順序表的元素類型ElemType為char),并在此基礎(chǔ)上設(shè)計(jì)一個(gè)主程序,完成如下功能: 初始化順序表L 依次插入a,b,c,d,e元素 輸出順序表L 輸出順

    2024年02月07日
    瀏覽(24)
  • 【數(shù)據(jù)結(jié)構(gòu)】線性表(一)線性表的定義及其基本操作(順序表插入、刪除、查找、修改)

    【數(shù)據(jù)結(jié)構(gòu)】線性表(一)線性表的定義及其基本操作(順序表插入、刪除、查找、修改)

    目錄 一、線性表 1. 線性表的定義 2. 線性表的要素 二、線性表的基本操作 三、線性表的順序存儲(chǔ)結(jié)構(gòu) 1. 定義 2. 順序表的操作? ? ?? a. 插入操作 b. 刪除操作 c. 查找操作 d. 修改操作 e. 代碼實(shí)例 ??????? ?一個(gè)線性表是由零個(gè)或多個(gè) 具有相同類型的結(jié)點(diǎn) 組成的有序集合。

    2024年02月03日
    瀏覽(99)
  • 【數(shù)據(jù)結(jié)構(gòu)和算法初階(C語(yǔ)言)】復(fù)雜鏈表(隨機(jī)指針,隨機(jī)鏈表的復(fù)制)題目詳解+鏈表順序表結(jié)尾

    【數(shù)據(jù)結(jié)構(gòu)和算法初階(C語(yǔ)言)】復(fù)雜鏈表(隨機(jī)指針,隨機(jī)鏈表的復(fù)制)題目詳解+鏈表順序表結(jié)尾

    目錄 ?1.隨機(jī)鏈表的復(fù)制 1.2題目描述? 1.3題目分析 1.4解題: 2.順序表和鏈表對(duì)比 2.1cpu高速緩存利用率 3.結(jié)語(yǔ) 一個(gè)長(zhǎng)度為? n ?的鏈表,每個(gè)節(jié)點(diǎn)包含一個(gè)額外增加的隨機(jī)指針? random ? 該指針可以指向鏈表中的任何節(jié)點(diǎn)或空節(jié)點(diǎn)。? ? ? ? 構(gòu)造這個(gè)鏈表的? 深拷貝 。?深拷貝

    2024年03月10日
    瀏覽(94)
  • 【(數(shù)據(jù)結(jié)構(gòu))- 順序表的實(shí)現(xiàn)】

    【(數(shù)據(jù)結(jié)構(gòu))- 順序表的實(shí)現(xiàn)】

    先來(lái)看兩張圖片 數(shù)據(jù)結(jié)構(gòu)是由“數(shù)據(jù)”和“結(jié)構(gòu)”兩詞組合?來(lái)。 什么是數(shù)據(jù)? 常見(jiàn)的數(shù)值1、2、3、4…、教務(wù)系統(tǒng)里保存的用戶信息(姓名、性別、年齡、學(xué)歷等等)、網(wǎng)頁(yè)里肉眼可以看到的信息(文字、圖片、視頻等等),這些都是數(shù)據(jù) 什么是結(jié)構(gòu)? 當(dāng)我們想要使用大

    2024年02月07日
    瀏覽(26)
  • 數(shù)據(jù)結(jié)構(gòu)--順序表的查找

    數(shù)據(jù)結(jié)構(gòu)--順序表的查找

    目標(biāo): GetElem(L,i):按位查找操作。獲取表L中第i個(gè)位置的元素的值。 代碼實(shí)現(xiàn) 時(shí)間復(fù)雜度 O(1) 由于順序表的各個(gè)數(shù)據(jù)元素在內(nèi)存中連續(xù)存放,因此可以根據(jù)起始地址和數(shù)據(jù)元素大小立即找到第i個(gè)元素——“隨機(jī)存取”特性 目標(biāo): LocateElem(Le):按值查找操作。在表L中查找具有給

    2024年02月11日
    瀏覽(28)
  • 【數(shù)據(jù)結(jié)構(gòu)】--順序表的實(shí)現(xiàn)

    【數(shù)據(jù)結(jié)構(gòu)】--順序表的實(shí)現(xiàn)

    什么是順序表?順序表(SeqList)是線性表中的一類。而線性表是n個(gè)具有相同特性的數(shù)據(jù)元素的有限序列。線性表是一種在實(shí)際中廣泛使用的數(shù)據(jù)結(jié)構(gòu),常見(jiàn)的線性表:順序表、鏈表、字符串、棧、隊(duì)列... 注意:線性表在邏輯上是線性結(jié)構(gòu),也就是說(shuō)是一條連續(xù)的直線。但在

    2024年04月17日
    瀏覽(23)
  • 【數(shù)據(jù)結(jié)構(gòu)】順序表的學(xué)習(xí)

    【數(shù)據(jù)結(jié)構(gòu)】順序表的學(xué)習(xí)

    前言:在之前我們學(xué)習(xí)了C語(yǔ)言的各種各樣的語(yǔ)法,因此我們今天開(kāi)始學(xué)習(xí)數(shù)據(jù)結(jié)構(gòu)這一個(gè)模塊,因此我們就從第一個(gè)部分來(lái)開(kāi)始學(xué)習(xí)\\\" 順序表 \\\"。 ?? 博主CSDN主頁(yè):衛(wèi)衛(wèi)衛(wèi)的個(gè)人主頁(yè) ?? ?? 專欄分類:數(shù)據(jù)結(jié)構(gòu) ?? ??代碼倉(cāng)庫(kù):衛(wèi)衛(wèi)周大胖的學(xué)習(xí)日記?? ??關(guān)注博主和博主一起學(xué)

    2024年02月05日
    瀏覽(19)
  • 數(shù)據(jù)結(jié)構(gòu):順序表的奧秘

    數(shù)據(jù)結(jié)構(gòu):順序表的奧秘

    ??個(gè)人名片: ??作者簡(jiǎn)介: 一名樂(lè)于分享在學(xué)習(xí)道路上收獲的大二在校生 ????個(gè)人主頁(yè)??:GOTXX ??個(gè)人WeChat:ILXOXVJE ??本文由GOTXX原創(chuàng),首發(fā)CSDN?????? ??系列專欄:零基礎(chǔ)學(xué)習(xí)C語(yǔ)言----- 數(shù)據(jù)結(jié)構(gòu)的學(xué)習(xí)之路 ??每日一句:如果沒(méi)有特別幸運(yùn),那就請(qǐng)?zhí)貏e努力!??

    2024年03月10日
    瀏覽(17)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包