中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

二、線性表的概念與實現

發布時間:2020-04-20 03:03:37 來源:網絡 閱讀:388 作者:少年不在了 欄目:編程語言

1.線性表的本質與相關操作

線性表的定義
?線性表(List)是零個或多個數據元素的集合
?線性表中的數據元素之間是有順序的
?線性表中的數據元素個數是有限的
?線性表中的數據元素的類型必須相同
二、線性表的概念與實現
線性表的性質
?a0為線性表的第一個元素,只有一個后繼
?an為線性表的最后一個元素,只有一個前驅
?除a0和an外的其它元素ai,既有前驅,又有后繼
?線性表能夠逐項訪問和順序存取
線性表的一些常用操作
?創建線性表
?銷毀線性表
?清空線性表
?將元素插入線性表
?將元素從線性表中刪除
?獲取線性表中某個位置的元素
?獲取線性表的長度
線性表操作的實現
?線性表在程序中表現為一種特殊的數據類型,其操作在程序中的表現為一組函數

List* List_Create();                                                       //創建線性表
void List_Destroy(List* list);                                       //銷毀線性表
void List_Clear(List* list);                                           //清空線性表
int List_Insert(List* list, ListNode* node, int pos);     //將元素插入線性表
ListNode* List_Delete(List* list, int pos);                   //將元素從線性表中刪除
ListNode* List_Get(List* list, int pos);                       //獲取線性表中某個位置的元素
int List_Length(List* list);                                         //獲取線性表的長度

2.線性表的順序存儲結構

順序存儲定義
?線性表的順序存儲結構,指的是用一段地址連續的存儲單元依次存儲線性表的數據元素。
二、線性表的概念與實現
在C語言中可以用一維數組來實現順序存儲結構
?存儲空間的起始位置:數組node
?線性表的最大容量:數組長度MAXSIZE
?線性表的當前長度:length

#define MAXSIZE 20
typedef struct  _tag_List
{
    char node[MAXSIZE];
    int length;
} List;

獲取元素操作
?判斷線性表是否合法
?判斷位置是否合法
?直接通過數組下標的方式獲取元素

char Get(List* list, int pos)
{
    char ret = -1;
    if((list != NULL) && (0 <= pos ) && (pos <= list->length))
    {
        ret = list->node[pos];
    }
    return ret;
}

插入元素操作
?判斷線性表是否合法
?判斷插入位置是否合法
?把最后一個元素到插入位置的元素后移一個位置
?將新元素插入
?線性表長度加1
二、線性表的概念與實現

int Insert(List* list, char c, int pos)
{
    //判斷線性表是否合法
    int ret = (list != NULL);
    int i = 0;
    //判斷插入位置是否合法
    ret = ret && ((list->length + 1) <= MAXSIZE); 
    ret = ret && (0 <= pos);
    if(ret)
    {
        if(pos >= list->length)
            pos = list->length;
        //從最后一個元素開始到第pos個位置,分別將他們地洞到后一個位置
        for(i=list->length;i > pos; i--)
        {
            list->node[i] = list->node[i-1];
        }
        //將新元素插入
        list->node[pos] = c;
        //長度加1
        list->length++;
    }
    return ret;
}

刪除元素操作
?判斷線性表是否合法
?判斷刪除位置是否合法
?將元素取出
?將刪除位置后的元素分別向前移動一個位置
?線性表長度減1
二、線性表的概念與實現

char Delete(List* list, int pos)
{
    char ret = -1;
    int i = 0;
    //判斷線性表是否合法,判斷刪除位置是否合法
    if((list != NULL)&&(0 <= pos)&&(pos < list-> length))
    {
        ret = list->node[pos];
        for(int i=pos+1; i < list->length; i++)
            list->node[i-1] = list->node[i];
        list->length--;
    }
    return ret;
}

3.線性表的鏈式存儲結構

鏈式存儲定義
?為了表示每個數據元素與其直接后繼元素之間的邏輯關系,每個元素除了存儲本身的信息外,還需要存儲指示其直接后繼的信息。
二、線性表的概念與實現
鏈式存儲邏輯結構
?n個結點鏈接成一個鏈式線性表的結構叫做鏈表,當每個結點中只包含一個指針域時,叫做單鏈表。
鏈表的基本概念
?表頭結點
??鏈表中的第一個結點,包含指向第一個數據元素的指針以及鏈表自身的一些信息
?數據結點
??鏈表中代表數據元素的結點,包含指向下一個數據元素的指針和數據元素的信息
?尾結點
??鏈表中的最后一個數據結點,其下一元素指針為空,表示無后繼
單鏈表示例
二、線性表的概念與實現
在C語言中可以用結構體來定義鏈表中的指針域;鏈表中的表頭結點也可以用結構體實現

//結點指針域定義
typedef struct _tag_LinkListNode{
    LinkListNode* next;
} LinkListNode;

//頭結點定義
typedef struct _tag_LinkList
{
    LinkListNode header;
    int length;
} TLinkList;

//數據元素定義
struct Value
{
    LinkListNode header;
    int v;
};

獲取第pos個元素操作
?判斷線性表是否合法
?判斷位置是否合法
?由表頭開始通過next指針移動pos次后,當前元素的next指針即指向要獲取的元素

LinkListNode* current = (LinkListNode*) list;
for(i=0; i<pos; i++)
{
    current = current->next;
}
ret = current->next;

插入元素操作
?判斷線性表是否合法
?判斷插入位置是否合法
?由表頭開始通過next指針移動pos次后,當前元素的next指針即指向要插入的位置
?將新元素插入
?線性表長度加1
二、線性表的概念與實現
刪除元素操作
?判斷線性表是否合法
?判斷插入位置是否合法
?獲取第pos個元素
?將第pos個元素從鏈表中刪除
?線性表長度減1

實現代碼

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

德化县| 平乡县| 汝城县| 社会| 龙口市| 延安市| 南昌市| 丹江口市| 北宁市| 会东县| 江永县| 永丰县| 依安县| 阜新市| 顺平县| 会东县| 承德市| 松阳县| 封开县| 眉山市| 拜城县| 贡山| 和静县| 永清县| 莱芜市| 治县。| 永兴县| 沭阳县| 外汇| 黄龙县| 永川市| 随州市| 凤阳县| 丰台区| 杂多县| 綦江县| 淳安县| 罗江县| 武义县| 津市市| 康乐县|