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

數(shù)據(jù)結(jié)構(gòu)c語言版:順序表

這篇具有很好參考價值的文章主要介紹了數(shù)據(jù)結(jié)構(gòu)c語言版:順序表。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

順序表的定義

? ?順序表是一種線性數(shù)據(jù)結(jié)構(gòu),它由一組連續(xù)的存儲單元組成,用來存儲具有相同數(shù)據(jù)類型的元素。順序表中的元素按照邏輯順序依次存放,并且可以通過索引來訪問和修改元素。


順序表的實現(xiàn)方式

? ? ? ?兩種:靜態(tài)順序表和動態(tài)順序表。

  • 靜態(tài)順序表:
    靜態(tài)順序表使用
    靜態(tài)數(shù)組來實現(xiàn),需要在創(chuàng)建順序表時提前確定順序表的大小。靜態(tài)順序表的大小是固定的,一旦分配了固定大小的存儲空間,就不能動態(tài)地改變大小。因此,靜態(tài)順序表的容量是有限的,如果插入的元素超過了容量,就會導(dǎo)致溢出。
  • ? ? ? ?優(yōu)點:可以直接通過下標(biāo)直接訪問元素,訪問元素速度快,時間復(fù)雜度是O(1)。
  • ? ? ? ?缺點:插入與刪除元素的操作比較耗時,需要移動其他元素,時間復(fù)雜度位O(n)。
  • 動態(tài)順序表:
  • 動態(tài)順序表使用動態(tài)數(shù)組來實現(xiàn),可以根據(jù)需要動態(tài)調(diào)整順序表的大小。動態(tài)順序表的大小是可變的,當(dāng)插入的元素超過當(dāng)前容量時,會自動擴容,當(dāng)刪除元素后,如果剩余容量過多,可以縮小容量,以節(jié)省內(nèi)存空間。
  • ? ? ? ?優(yōu)點:可以根據(jù)動態(tài)調(diào)整大小,靈活性較高。
  • ? ? ? ?缺點:在插入和刪除元素時,可能需要重新分配存儲空間,導(dǎo)致一定的時間開銷。

    靜態(tài)順序表的例子

#define  _CRT_SECURE_NO_WARNINGS
#include <stdio.h>

// 定義靜態(tài)順序表的最大長度
#define MAX_SIZE 100

// 定義結(jié)構(gòu)體,表示靜態(tài)順序表
struct SeqList 
{
    int data[MAX_SIZE];  // 數(shù)據(jù)數(shù)組
    int length;          // 當(dāng)前表長
};

// 初始化順序表
void initSeqList(struct SeqList* list) 
{
    list->length = 0;  // 初始化表長為0
}

// 插入元素到順序表
int insertElement(struct SeqList* list, int position, int value) 
{
    // 檢查插入位置的有效性
    if (position < 1 || position > list->length + 1 || list->length >= MAX_SIZE) 
    {
        printf("插入位置無效或表滿,插入失敗\n");
        return 0;  // 插入失敗
    }

    // 將插入位置及之后的元素后移
    for (int i = list->length; i >= position; i--) 
    {
        list->data[i] = list->data[i - 1];
    }

    // 在插入位置處插入新元素
    list->data[position - 1] = value;

    // 表長加1
    list->length++;

    printf("插入成功\n");
    return 1;  // 插入成功
}

// 刪除順序表中指定位置的元素
int deleteElement(struct SeqList* list, int position) 
{
    // 檢查刪除位置的有效性
    if (position < 1 || position > list->length) 
    {
        printf("刪除位置無效,刪除失敗\n");
        return 0;  // 刪除失敗
    }

    // 將刪除位置之后的元素前移
    for (int i = position; i < list->length; i++) 
    {
        list->data[i - 1] = list->data[i];
    }

    // 表長減1
    list->length--;

    printf("刪除成功\n");
    return 1;  // 刪除成功
}

// 打印順序表中的元素
void printSeqList(struct SeqList* list) 
{
    printf("順序表元素:");
    for (int i = 0; i < list->length; i++) 
    {
        printf("%d ", list->data[i]);
    }
    printf("\n");
}

int main() 
{
    // 聲明并初始化順序表
    struct SeqList myList;
    initSeqList(&myList);

    // 在順序表中插入元素
    insertElement(&myList, 1, 10);
    insertElement(&myList, 1, 20);
    insertElement(&myList, 1, 5);
    insertElement(&myList, 1, 6);
    // 打印順序表
    printSeqList(&myList);

    // 刪除順序表中的元素
    deleteElement(&myList, 1);

    // 打印刪除后的順序表
    printSeqList(&myList);

    return 0;
}

上述程序?qū)崿F(xiàn)了一個簡單的靜態(tài)順序表,包括初始化、插入、刪除和打印操作。大家可以自己修改插入,刪除數(shù)據(jù),體會其中的奧秘。

效果

數(shù)據(jù)結(jié)構(gòu)c語言版:順序表,數(shù)據(jù)結(jié)構(gòu),數(shù)據(jù)結(jié)構(gòu),c語言,開發(fā)語言


動態(tài)順序表的例子

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

// 定義動態(tài)順序表的初始容量和增量
#define INIT_CAPACITY 10
#define INCREMENT 5

// 定義結(jié)構(gòu)體,表示動態(tài)順序表
struct SeqList 
{
    int* data;          // 數(shù)據(jù)指針
    int length;         // 當(dāng)前表長
    int capacity;       // 當(dāng)前容量
};

// 初始化順序表
void initSeqList(struct SeqList* list) 
{
    list->data = (int*)malloc(INIT_CAPACITY * sizeof(int));  // 分配初始容量的內(nèi)存
    list->length = 0;  // 初始化表長為0
    list->capacity = INIT_CAPACITY;  // 初始化容量為初始容量
}

// 銷毀順序表
void destroySeqList(struct SeqList* list) 
{
    free(list->data);  // 釋放動態(tài)分配的內(nèi)存
    list->data = NULL;  // 將指針置為空
    list->length = 0;  // 表長置為0
    list->capacity = 0;  // 容量置為0
}

// 打印順序表中的元素
void printSeqList(struct SeqList* list) 
{
    printf("順序表元素:");
    for (int i = 0; i < list->length; i++) 
    {
        printf("%d ", list->data[i]);
    }
    printf("\n");
}

// 自動增容
void increaseCapacity(struct SeqList* list) 
{
    int* newData = (int*)realloc(list->data, (list->capacity + INCREMENT) * sizeof(int));  // 重新分配內(nèi)存
    if (newData != NULL) 
    {  // 分配成功
        list->data = newData;  // 將指針指向新的內(nèi)存
        list->capacity += INCREMENT;  // 容量增加
        printf("自動增容成功,容量增加到%d\n", list->capacity);
    }
    else 
    {  // 分配失敗
        printf("自動增容失敗\n");
    }
}

// 插入元素到順序表
int insertElement(struct SeqList* list, int position, int value) 
{
    // 檢查插入位置的有效性
    if (position < 1 || position > list->length + 1) 
    {
        printf("插入位置無效,插入失敗\n");
        return 0;  // 插入失敗
    }

    // 如果表滿,自動增容
    if (list->length >= list->capacity) 
    {
        increaseCapacity(list);
    }

    // 將插入位置及之后的元素后移
    for (int i = list->length; i >= position; i--) 
    {
        list->data[i] = list->data[i - 1];
    }

    // 在插入位置處插入新元素
    list->data[position - 1] = value;

    // 表長加1
    list->length++;

    printf("插入成功\n");
    return 1;  // 插入成功
}

// 刪除順序表中指定位置的元素
int deleteElement(struct SeqList* list, int position) 
{
    // 檢查刪除位置的有效性
    if (position < 1 || position > list->length) 
    {
        printf("刪除位置無效,刪除失敗\n");
        return 0;  // 刪除失敗
    }

    // 將刪除位置之后的元素前移
    for (int i = position; i < list->length; i++) 
    {
        list->data[i - 1] = list->data[i];
    }

    // 表長減1
    list->length--;

    printf("刪除成功\n");
    return 1;  // 刪除成功
}

// 查找元素在順序表中的位置
int searchElement(struct SeqList* list, int value) 
{
    for (int i = 0; i < list->length; i++) 
    {
        if (list->data[i] == value) 
        {
            printf("元素%d在順序表中的位置是%d\n", value, i + 1);
            return i + 1;  // 返回位置
        }
    }

    printf("元素%d不在順序表中\(zhòng)n", value);
    return 0;  // 查找失敗
}

int main() 
{
    // 聲明并初始化順序表
    struct SeqList myList;
    initSeqList(&myList);

    // 在順序表中插入元素
    insertElement(&myList, 1, 10);
    insertElement(&myList, 2, 20);
    insertElement(&myList, 1, 5);

    // 打印順序表
    printSeqList(&myList);

    // 刪除順序表中的元素
    deleteElement(&myList, 2);

    // 打印刪除后的順序表
    printSeqList(&myList);

    // 查找元素在順序表中的位置
    searchElement(&myList, 20);
    searchElement(&myList, 30);

    // 銷毀順序表
    destroySeqList(&myList);

    return 0;
}

效果

數(shù)據(jù)結(jié)構(gòu)c語言版:順序表,數(shù)據(jù)結(jié)構(gòu),數(shù)據(jù)結(jié)構(gòu),c語言,開發(fā)語言文章來源地址http://www.zghlxwxcb.cn/news/detail-780789.html

到了這里,關(guān)于數(shù)據(jù)結(jié)構(gòu)c語言版:順序表的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

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

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

相關(guān)文章

  • 數(shù)據(jù)結(jié)構(gòu)(C語言)——順序表詳解

    數(shù)據(jù)結(jié)構(gòu)(C語言)——順序表詳解

    數(shù)據(jù)結(jié)構(gòu)是計算機存儲和組織數(shù)據(jù)的方式。常用的數(shù)據(jù)結(jié)構(gòu)有:數(shù)組(Array)、棧(Stack)、隊列(Queue)、鏈表(Linked List)、樹(Tree)、圖(Graph)、堆(Heap)等;而數(shù)據(jù)結(jié)構(gòu)又可以通過邏輯結(jié)構(gòu)與物理結(jié)構(gòu)進行分類,邏輯結(jié)構(gòu)是指數(shù)據(jù)元素之間的邏輯關(guān)系,也就是數(shù)據(jù)元

    2024年04月16日
    瀏覽(23)
  • 【數(shù)據(jù)結(jié)構(gòu)|C語言版】順序表

    【數(shù)據(jù)結(jié)構(gòu)|C語言版】順序表

    各位小伙伴大家好!小編來給大家講解一下數(shù)據(jù)結(jié)構(gòu)中順序表的相關(guān)知識。 【概念】數(shù)據(jù)結(jié)構(gòu)是計算機存儲、組織數(shù)據(jù)的?式。 數(shù)據(jù)結(jié)構(gòu)是指相互之間存在?種或多種特定關(guān)系的數(shù)據(jù)元素的集合 數(shù)據(jù)結(jié)構(gòu)反映數(shù)據(jù)的內(nèi)部構(gòu)成,即數(shù)據(jù)由那部分構(gòu)成,以什么?式構(gòu)成,以及數(shù)

    2024年04月16日
    瀏覽(21)
  • 數(shù)據(jù)結(jié)構(gòu)——順序表(C語言版)

    順序表是數(shù)據(jù)結(jié)構(gòu)中最基本的一種線性表,它以一段連續(xù)的存儲空間來存儲數(shù)據(jù)元素,元素之間的順序由它們在內(nèi)存中的位置來決定。在C語言中,我們通常使用數(shù)組來實現(xiàn)順序表。 目錄 順序表的結(jié)構(gòu)定義 順序表的基本操作 應(yīng)用實例 順序表的結(jié)構(gòu)定義 首先,我們需要定義一

    2024年04月10日
    瀏覽(21)
  • 數(shù)據(jù)結(jié)構(gòu)c語言版:順序表

    數(shù)據(jù)結(jié)構(gòu)c語言版:順序表

    ? ? 順序表是一種 線性數(shù)據(jù)結(jié)構(gòu) ,它由一組連續(xù)的存儲單元組成,用來存儲具有相同數(shù)據(jù)類型的元素。順序表中的元素按照邏輯順序依次存放,并且可以通過索引來訪問和修改元素。 ? ? ? ? 兩種:靜態(tài)順序表和動態(tài)順序表。 靜態(tài)順序表: 靜態(tài)順序表使用 靜態(tài)數(shù)組 來實現(xiàn)

    2024年02月02日
    瀏覽(21)
  • 【數(shù)據(jù)結(jié)構(gòu)】C語言實現(xiàn)順序棧

    【數(shù)據(jù)結(jié)構(gòu)】C語言實現(xiàn)順序棧

    大家好,很高興又和大家見面啦?。?! 在上一個篇章中,我們介紹了棧的基本概念,以及棧中的重要術(shù)語。通過介紹我們知道了棧的本質(zhì)也是一種線性表,只不過它是一種操作受限的線性表。因此棧的實現(xiàn)方式與線性表的實現(xiàn)實際上是大同小異的。下面我們就來介紹一下如何

    2024年01月19日
    瀏覽(24)
  • 【數(shù)據(jù)結(jié)構(gòu)】順序表---C語言版

    【數(shù)據(jù)結(jié)構(gòu)】順序表---C語言版

    順序表是一種常見的數(shù)據(jù)結(jié)構(gòu),今天就讓我來帶領(lǐng)大家一起學(xué)習(xí)一下吧! 不會再休息,一分一毫了,OK,let’s go! 線性表(linear list)是n個具有 相同特性的數(shù)據(jù)元素 的有限序列。 線性表是一種在實際中廣泛使 用的數(shù)據(jù)結(jié)構(gòu), 常見的線性表:順序表、鏈表、棧、隊列、字符

    2024年02月04日
    瀏覽(22)
  • 數(shù)據(jù)結(jié)構(gòu)順序表(C語言實現(xiàn))

    數(shù)據(jù)結(jié)構(gòu)順序表(C語言實現(xiàn))

    ????????從本章開始就是開始數(shù)據(jù)結(jié)構(gòu)的開端,本章將會寫出數(shù)據(jù)結(jié)構(gòu)中的順序表的代碼實現(xiàn),多會以注釋的方法來描述一些細(xì)節(jié)(注釋是我們程序員必須常用的工具)。 ? ? ? ? 話不多說安全帶系好,發(fā)車?yán)玻ńㄗh電腦觀看)。 附:紅色,部分為重點部分;藍(lán)顏色為需

    2024年02月10日
    瀏覽(26)
  • 【數(shù)據(jù)結(jié)構(gòu)】C語言實現(xiàn)順序表

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

    順序表是用順序存儲方式存放的線性表(可以理解為數(shù)組的存儲方式),表中的元素在內(nèi)存中彼此相鄰。 靜態(tài)存儲:在定義時就確定了順序表的大小,并且之后順序表的大小不會改變(即使之后空間不夠用了,也無法增加) 動態(tài)存儲:線性表的大小可以根據(jù)需要更改(順序

    2024年02月08日
    瀏覽(22)
  • 【數(shù)據(jù)結(jié)構(gòu)|C語言版】順序表應(yīng)用

    【數(shù)據(jù)結(jié)構(gòu)|C語言版】順序表應(yīng)用

    上期回顧: 【數(shù)據(jù)結(jié)構(gòu)|C語言版】順序表 個人主頁: C_GUIQU 各位小伙伴大家好!上期小編給大家講解了數(shù)據(jù)結(jié)構(gòu)中的順序表,接下來講講順序表該如何應(yīng)用。 (1)能夠保存聯(lián)系人的姓名、年齡、性別、電話、住址 (2)添加聯(lián)系人信息 (3)刪除聯(lián)系人信息 (4)修改聯(lián)系人信

    2024年04月16日
    瀏覽(23)
  • 數(shù)據(jù)結(jié)構(gòu)(C語言):順序表就地逆置

    設(shè)計一個算法,實現(xiàn)將順序表就地逆置 ,即利用原順序表的存儲單元將數(shù)據(jù)元素序列(a0,a1,…,an-1)逆置為(an-1,…, a1,a0)。 本題所使用的數(shù)據(jù)結(jié)構(gòu)定義如下: 順序表的數(shù)據(jù)結(jié)構(gòu)定義: 1 、定義兩數(shù)交換函數(shù)。 2 、用循環(huán)遍歷順序表中的元素,依次調(diào)用兩數(shù)交換函數(shù),將順

    2024年02月08日
    瀏覽(13)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包