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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

线性表的顺序存储结构(数据结构篇)

發布時間:2025/3/15 编程问答 11 豆豆
生活随笔 收集整理的這篇文章主要介紹了 线性表的顺序存储结构(数据结构篇) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

筆記:數據結構篇

線性表

順序表
知識點

1:線性表(linear list)是具有相同特征的數據元素的一個有限序列。

2:線性表用二元組(D,R)

D={ai|1<=i<=n,ai為ElemType類型} R={r} r={<a,ai+1>|1<=i<=n-1}

3:線性表具有以下特征

(1)有窮性:一個線性表中的元素個數是有限的

(2)一致性:一個線性表所有的元素的性質具有相同的

(3)序列性:一個系線性表中所有的元素之間相對位置是線性的,

各元素的位置只取決于它們的序號,所以一個線性表中可以存在兩個相同的值

以下為順序表基本運算

void initList(linearList * &L); // 初始化一個空的線性表

void createList(linearList * &L, ElemType data[], int n) // 自動確定長度的初始化方法

void destroyList(linearList * &L); // 銷毀線性表并釋放其所存儲的空間

bool insertElem(linearList * &L, int i, ElemType el); // 在第 i 個位置插入 el 元素,i 不正確或空間不足返回false.

// bool insertElem(linearList * &L, int i, ElemType * el); // insertElem 方法的重載

bool deleteElem(linearList * &L, int i, ElemType &el); // 刪除第 i 個元素,并用 el 返回其值
// deleteElem(linearList * &L, int i); // deleteElem 方法的重載

// 以下方法只讀取數據無需改實參值的引用傳遞
bool listEmpty(linearList * L); // @return [Bool] 線性表是否為空

int listLength(linearList * L); // 返回線性表(數據的)的長度

void printList(linearList * L); // (控制臺)打印線性表

bool getElem(linearList * L, int index, ElemType &el); // 獲取線性表中引索為 index 的元素的值,引用賦值到傳入el的實參上,越界時返回false

// void getElem(linearList * L, int index, ElemType * el); // getElem 方法的重載,指針賦值給 ElemType 的數據類型(理論更省空間)

int locateElem(linearList * L, ElemType el); // 順序查找第一個線性表數據中第一個和 el 相等的數據的引索,沒有找到則返回-1

// void locateElem(linearList * L, ElemType * el); // locateElem 方法的重載,指針操作 ElemType 的數據類型(理論更省空間)

void CreateList(SqList*&L,ELemType a[],int n)建立由n個元素組成順序表
void InitList(SqList *&L)初始化線性表
DestroyList(SqList *&L)銷毀線性表
bool ListEmpty(SqList *L)判段是否是空表
int ListLength(Sqlist *L)求線性表長度
void DispList(SqList *L)輸出線性表
bool GetElem(L,i,ElemType&e)求線性表中的某個數據元素值
bool LocateElem(SqList *L.ElemType e)按元素值查找
bool ListInsert(SqList *&L,int i,ElemType e)插入數據元素
bool ListDelete(&L,i,&e)刪除數據元素

以下為我的代碼實現

#include <stdio.h> #include <stdlib.h> #define MaxSize 20 /* void CreateList(SqList*&L,ELemType a[],int n) //建立由n個元素組成順序表void InitList(SqList *&L) //初始化線性表 DestroyList(SqList *&L) // 銷毀線性表 bool ListEmpty(SqList *L) // 判段是否是空表 int ListLength(Sqlist *L) // 求線性表長度 void DispList(SqList *L) //輸出線性表 bool GetElem(L,i,ElemType&e) // 求線性表中的某個數據元素值 bool LocateElem(SqList *L.ElemType e) // 按元素值查找 bool ListInsert(SqList *&L,int i,ElemType e) // 插入數據元素 bool ListDelete(&L,i,&e) //刪除數據元素 */ typedef int ElemType; typedef struct {ElemType data[MaxSize];ElemType *elem;//存放線性表中的元素int length; //存放線性表的長度 } SqList; //順序表的類型void InitList(SqList * &L) {L = (SqList * )malloc(sizeof(SqList));//分配存放線性表的空間L->length = 0; //置空線性表的長度為0 }void CreateList(SqList *&L,ElemType a[],int n) {int i = 0,k=0; //k表示L中元素的個數L = (SqList * )malloc(sizeof(SqList)); //分配存放線性表的空間while(i<n) //掃描數組a中的元素,并且將a[i]中的元素存放到L中{L->data[k] = a[i];k++;i++;}L->length = k; //設置L的長度為k }void DestoryList(SqList * &L) {free(L); }bool ListEmpty(SqList * L) {return (L ->length==0);}int ListLength(SqList * L) {return(L->length); }void DispList(SqList * L) {for(int i=0;i<L -> length;i++)printf("%d",L->data[i]);printf("\n"); }bool GetElem(SqList * L,int i,ElemType &e) {if(i<1||i>L->length)return false;e = L->data[i];return true; }int LocateElem(SqList *L,ElemType e) {int i = 0;while(i<L->length &&L->data[i]!=e)i++;if(i>=L->length)return 0;elsereturn i+1; }bool ListInsert(SqList *&L,int i,ElemType e) {/*int j;if(i<1|| i>L->length +1||L->length ==MaxSize)return false;i--;for(j=L->length;j>i;j--)L->data[j]=L->data[j-1];L ->data[i] = e;L ->length++;return true;*///1.檢查插入的位置是否合法int j=0;if (L->length>=MaxSize) {printf("移除\n");return 0;}else if (i<1||i>L->length+1) {printf("插入位置不正確\n");return 0;} else {for (j=L->length-1; j>=i-1; j--)//2.插入位置以后的所有元素依次后移L->data[j+1]=L->data[j];//3.將元素x置入到下標i-1的位置L->data[i-1]=e;//4.將表的長度加1L->length=L->length+1;return 1; } }bool ListDelete(SqList *&L,int i,ElemType &e) {int j;if(i<1 || i>L->length)return false;i--;e=L->data[i];for(j=i;j<L->length-1;j++)L->data[i] = L ->data[j+1];L->length--;return true; }/* //重建法:合并A,B中元素,先將A中的元素放入C中,再將B中與A不同的元素放入C中 void Union1(SqList *A,SqList *B,SqList *&C)//有序順序表表示集合,求集合的并 {int i,lena;ElemType e;for(i=1;i<=ListLength(A);i++){GetElem(A,i,e);ListInsert(C,i,e);}lena=ListLength(A);for(i=1;i<=ListLength(B);i++){GetElem(B,i,e);if(!LocateElem(A,e))ListInsert(C,++lena,e);} }*/ void DispalyElem(SqList *l){for(int i=0;i<l->length;i++)printf("%d ",l->elem[i]);printf("\n");}/*void Union(SqList *A,SqList *B,SqList *&C){printf("求線性表的并集\n");int i=0,j=0,k=0;int a,b;while((i<=A->length-1)&&(j<=B->length-1)){GetElem(A,i,a);GetElem(B,j,b);if(a<=b)//給元素排序,并且存到C中{C->elem[k++]=A->elem[i++];}else{C->elem[k++]=B->elem[j++];}}while(i<=A->length-1){GetElem(A,i,a);C->elem[k++]=A->elem[i++];}while(j<=B->length-1){GetElem(B,j,b);C->elem[k++]=B->elem[j++];}C->length=k;}*/int main() {SqList *L;int a[]={0,2,3,4,5,6,7,8,9,0};CreateList(L,a,10);DispList(L);int sucess = ListInsert(L,10,10);if(sucess){printf("插入成功\n");}else{printf("插入失敗\n");}DispList(L);DestoryList(L);system("pause");/* SqList *A,*B,*C;InitList(A);//初始化線性表A;InitList(B);//初始化線性表B;printf("輸入線性表A元素個數:\n");scanf("%d",&A->length);printf("輸入線性表A中的元素:\n");for(int j=0;j<A->length;j++){scanf("%d",&A->data[j]);}printf("輸入線性表B元素個數:\n");scanf("%d",&B->length);printf("輸入線性表B中的元素:\n");for(int j=0;j<B->length;j++){scanf("%d",&B->data[j]);}Union(A,B,C);DispalyElem(C);return 0;*/}

總結:幾次運行失敗的原因,

1:沒有理解線性表的結構

2:沒有理解里面參數的實際意義如*,&

3:運行使用的數據范圍,要在邊界范圍內

鏈表

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳

1:單鏈表的優點不要連續空間,改變容量方便,不可以隨機存儲,耗費一定空間指針
2:強調這是一個單鏈表用Linklist
? 強調這是一個節點用LNode
*

#### 總結:幾次運行失敗的原因,#### 1:沒有理解線性表的結構#### 2:沒有理解里面參數的實際意義如*,&#### 3:運行使用的數據范圍,要在邊界范圍內# 鏈表1:單鏈表的優點不要連續空間,改變容量方便,不可以隨機存儲,耗費一定空間指針2:強調這是一個單鏈表用Linklist? 強調這是一個節點用LNode*3:帶頭節點,不帶頭節點[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳

總結

以上是生活随笔為你收集整理的线性表的顺序存储结构(数据结构篇)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。