日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

《数据结构》c语言版学习笔记——线性表的顺序存储结构

發(fā)布時(shí)間:2024/2/28 编程问答 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 《数据结构》c语言版学习笔记——线性表的顺序存储结构 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

線性表的順序存儲(chǔ)結(jié)構(gòu)

第一章 線性表的順序存儲(chǔ)結(jié)構(gòu)


文章目錄

  • 線性表的順序存儲(chǔ)結(jié)構(gòu)
  • 前言
  • 一、順序存儲(chǔ)結(jié)構(gòu)的建立
    • 1.條件
    • 2.代碼
  • 二、順序存儲(chǔ)結(jié)構(gòu)的獲得元素
    • 1.條件
    • 2.代碼
  • 三、順序存儲(chǔ)結(jié)構(gòu)的插入
    • 1.條件
    • 2.代碼
  • 四、順序存儲(chǔ)結(jié)構(gòu)的刪除
    • 1.條件
    • 2.代碼
  • 五、總代碼
  • 總結(jié)


前言

數(shù)據(jù)結(jié)構(gòu)是大學(xué)里計(jì)算機(jī)專業(yè)類必掌握的一門課程,它很重要,尤其是對(duì)一些考研的計(jì)算機(jī)類學(xué)生來說,通常為專業(yè)課。數(shù)據(jù)結(jié)構(gòu)并不是哪種編程語言所設(shè)定的,它可以用c語言來寫,也可以用c++、java、python等等,學(xué)會(huì)了一門編程語言,僅僅只是掌握一些,而學(xué)會(huì)了數(shù)據(jù)結(jié)構(gòu)可以掌握很多技巧和算法并不斷提高編程能力,這對(duì)將來很重要。


提示:本系列文章均使用Visual Studio 2019編程,編程語言為c語言。

一、順序存儲(chǔ)結(jié)構(gòu)的建立

1.條件

設(shè)順序線性表L,n為數(shù)據(jù)元素,則1 ≦ n ≦ ListLength(L),這里解釋一下這個(gè)閉區(qū)間,首先我們知道線性表是從1開始的,而不是像數(shù)組從0開始,這點(diǎn)要知道,所以n的值不能小于1,并且不能大于該線性表的長度。
我們?cè)O(shè)該線性表的存儲(chǔ)空間為20,即#define MAXSIZE 20,然后假設(shè)ElemType為int類型,使用一個(gè)結(jié)構(gòu)體,定義一個(gè)data數(shù)組來存儲(chǔ)數(shù)據(jù)元素,length為當(dāng)前長度。
即,我們可知道建立一個(gè)順序線性表有三個(gè)要點(diǎn):
①首先要定義其最大存儲(chǔ)量
②存儲(chǔ)空間
③線性表的當(dāng)前長度

2.代碼

#include <stdio.h> #define MAXSIZE 20 //設(shè)定存儲(chǔ)空間初始分配量 //順序存儲(chǔ)結(jié)構(gòu)的建立 typedef int ElemType; typedef struct {ElemType data[MAXSIZE]; //數(shù)組存儲(chǔ)數(shù)據(jù)元素,最大值為MAXSIZEint length; //線性表當(dāng)前長度 }SqList;

二、順序存儲(chǔ)結(jié)構(gòu)的獲得元素

1.條件

首先這里返回值類型Status是一個(gè)int整型,返回OK代表1,返回ERROR代表0。我們要實(shí)行GetElem操作,即將順序線性表L的第i個(gè)元素值返回,因?yàn)閿?shù)組是從0開始的,代碼中只要n的數(shù)值在所定義的數(shù)組下標(biāo)的范圍內(nèi),把數(shù)組n-1下標(biāo)的值返回。
即,我們可知道順序線性表獲得元素有兩個(gè)要點(diǎn):
①判斷語句
②返回值

2.代碼

#include <stdio.h> #define MAXSIZE 20 //設(shè)定存儲(chǔ)空間初始分配量 #define OK 1 #define ERROR 0 #define TRUE 1 #define FALSE 0 typedef int Status; //順序結(jié)構(gòu)的獲得元素操作 Status GetElem(SqList L, int n, ElemType* e) //Status是函數(shù)類型,其值是函數(shù)結(jié)果狀態(tài)代碼,例OK等; { //SqList L為該線性表;int n為索引位置;ElemType*e為指針直接訪問地址if (L.length == 0 || n<1 || n>L.length) //線性表的長度不為0;線性表是從1訪問的,而不是0;索引位置不能大于線性表的長度return ERROR; //以上均返回錯(cuò)誤*e = L.data[n-1]; //若滿足以上條件,則將線性表L中的第n個(gè)位置元素值返回,即只要n的數(shù)值在數(shù)組下標(biāo)范圍內(nèi),就將數(shù)組第n-1下標(biāo)的值返回return OK; }

三、順序存儲(chǔ)結(jié)構(gòu)的插入

1.條件

設(shè)k為當(dāng)前位置,首先判斷線性表是否已滿,再對(duì)插入位置進(jìn)行判斷,然后判斷插入位置是否在表尾,從而執(zhí)行不同操作,若不在表尾,通過for語句遍歷,將要插入的位置后的數(shù)據(jù)元素向后移動(dòng)一位;若在表尾,則直接插入新元素,當(dāng)前長度++。
即,順序線性表插入元素有五個(gè)要點(diǎn):
①若插入位置不合理,拋出異常
②判斷語句
③從最后一個(gè)元素開始向前遍歷到第i個(gè)位置,分別將它們都向后移動(dòng)一個(gè)位置
④將要插入元素插入位置i處
⑤表長加1

2.代碼

//順序結(jié)構(gòu)的插入操作 typedef int Status; Status ListInsert(SqList* L, int n, ElemType e) {int k; //k為當(dāng)前位置if (L->length == MAXSIZE) //當(dāng)順序線性表存儲(chǔ)已滿返回錯(cuò)誤 return ERROR; if (n<1 || n>L->length + 1) //插入位置小于1、大于當(dāng)前長度加一則返回錯(cuò)誤return ERROR;if (n <= L->length) //若插入位置不在線性表表尾,執(zhí)行以下操作,將要插入的位置后數(shù)據(jù)元素向后移動(dòng)一位{for (k = L->length - 1; k >= n - 1; k--) //遍歷從i索引位置到線性表長度的每個(gè)數(shù)據(jù)元素,將其全部向后移動(dòng)一位L->data[k + 1] = L->data[k]; }//若插入位置在表尾,執(zhí)行插入新元素操作L->data[n - 1] = e; //[i-1]是因?yàn)轫樞虮砦恢?1=數(shù)組下標(biāo),數(shù)組從0開始,順序表從1開始L->length++;return OK; }

四、順序存儲(chǔ)結(jié)構(gòu)的刪除

1.條件

設(shè)k為當(dāng)前位置,首先判斷線性表是否為空表,再判斷刪除元素長度,用指針取出所要?jiǎng)h除的數(shù)據(jù)元素,然后再判斷刪除位置是否在表尾,若不在表尾,通過for語句遍歷,將要?jiǎng)h除的位置后數(shù)據(jù)元素向前移動(dòng)一位;若在表尾,則刪除該元素,當(dāng)前長度- -。
順序線性表刪除元素有四個(gè)要點(diǎn):
①若刪除位置不合理,拋出異常
②取出刪除元素
③從刪除元素位置開始遍歷到最后一個(gè)元素位置,將它們向前移動(dòng)一位
④表長減1

2.代碼

//順序結(jié)構(gòu)的刪除操作 typedef int Status; Status ListDelete(SqList* L, int n, ElemType* e) {int k; //k為當(dāng)前位置if (L->length == 0) //若線性表為空,即空表,則返回錯(cuò)誤return ERROR;if (n<1 || n>L->length) //當(dāng)刪除元素小于1,大于當(dāng)前長度,刪除位置不正確返回錯(cuò)誤return ERROR;*e = L->data[n - 1]; //e相當(dāng)于回收站,將要?jiǎng)h除的元素位置放到e中;*e表示取指針e所指地址存儲(chǔ)的值;線性表中第n個(gè)值相當(dāng)于數(shù)組data[n-1]if (n < L->length) //若刪除操作不是最后位置,執(zhí)行以下操作,將要?jiǎng)h除的位置后數(shù)據(jù)元素向前移動(dòng)一位{for (k = n; k < L->length; k++) //遍歷從n索引位置到線性表長度的每個(gè)數(shù)據(jù)元素,將其全部向后移動(dòng)一位L->data[k - 1] = L->data[k];}L->length--; return OK; }

五、總代碼

//線性表順序存儲(chǔ)結(jié)構(gòu) #include <stdio.h> #define MAXSIZE 20 //設(shè)定存儲(chǔ)空間初始分配量 #define OK 1 #define ERROR 0 #define TRUE 1 #define FALSE 0//順序存儲(chǔ)結(jié)構(gòu)的建立 typedef int Status; typedef int ElemType; typedef struct {ElemType data[MAXSIZE]; //數(shù)組存儲(chǔ)數(shù)據(jù)元素,最大值為MAXSIZEint length; //線性表當(dāng)前長度 }SqList;//順序結(jié)構(gòu)的獲得元素操作 Status GetElem(SqList L, int n, ElemType* e) //Status是函數(shù)類型,其值是函數(shù)結(jié)果狀態(tài)代碼,例OK等; { //SqList L為該線性表;int n為索引位置;ElemType*e為指針直接訪問地址if (L.length == 0 || n<1 || n>L.length) //線性表的長度不為0;線性表是從1訪問的,而不是0;索引位置不能大于線性表的長度return ERROR; //以上均返回錯(cuò)誤*e = L.data[n-1]; //若滿足以上條件,則將線性表L中的第n個(gè)位置元素值返回,即只要n的數(shù)值在數(shù)組下標(biāo)范圍內(nèi),就將數(shù)組第n-1下標(biāo)的值返回return OK; }//順序結(jié)構(gòu)的插入操作 Status ListInsert(SqList* L, int n, ElemType e) {int k; //k為當(dāng)前位置if (L->length == MAXSIZE) //當(dāng)順序線性表存儲(chǔ)已滿返回錯(cuò)誤 return ERROR; if (n<1 || n>L->length + 1) //插入位置小于1、大于當(dāng)前長度加一則返回錯(cuò)誤return ERROR;if (n <= L->length) //若插入位置不在線性表表尾,執(zhí)行以下操作,將要插入的位置后數(shù)據(jù)元素向后移動(dòng)一位{for (k = L->length - 1; k >= n - 1; k--) //遍歷從i索引位置到線性表長度的每個(gè)數(shù)據(jù)元素,將其全部向后移動(dòng)一位L->data[k + 1] = L->data[k]; }//若插入位置在表尾,執(zhí)行插入新元素操作L->data[n - 1] = e; //[i-1]是因?yàn)轫樞虮砦恢?1=數(shù)組下標(biāo),數(shù)組從0開始,順序表從1開始L->length++;return OK; }//順序結(jié)構(gòu)的刪除操作 Status ListDelete(SqList* L, int n, ElemType* e) {int k; //k為當(dāng)前位置if (L->length == 0) //若線性表為空,即空表,則返回錯(cuò)誤return ERROR;if (n<1 || n>L->length) //當(dāng)刪除元素小于1,大于當(dāng)前長度,刪除位置不正確返回錯(cuò)誤return ERROR;*e = L->data[n - 1]; //e相當(dāng)于回收站,將要?jiǎng)h除的元素位置放到e中;*e表示取指針e所指地址存儲(chǔ)的值;線性表中第n個(gè)值相當(dāng)于數(shù)組data[n-1]if (n < L->length) //若刪除操作不是最后位置,執(zhí)行以下操作,將要?jiǎng)h除的位置后數(shù)據(jù)元素向前移動(dòng)一位{for (k = n; k < L->length; k++) //遍歷從n索引位置到線性表長度的每個(gè)數(shù)據(jù)元素,將其全部向后移動(dòng)一位L->data[k - 1] = L->data[k];}L->length--; return OK; }

總結(jié)

以上就是本次的筆記內(nèi)容,本文僅僅通過文字和代碼簡(jiǎn)單介紹了順序存儲(chǔ)結(jié)構(gòu)的各項(xiàng)操作,建議自己分析總結(jié)其各個(gè)操作并結(jié)合自己的編程能力選擇編程語言再寫一遍代碼從而加深印象。


附:在下一文章會(huì)介紹線性表鏈?zhǔn)酱鎯?chǔ)結(jié)構(gòu)的各項(xiàng)操作,持續(xù)更新ing……

總結(jié)

以上是生活随笔為你收集整理的《数据结构》c语言版学习笔记——线性表的顺序存储结构的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。