《資料結構與演算法》——表、棧和佇列

weixin_50599081發表於2020-11-11

線性表:
線性表是最基本和常用的一類資料結構,它表示線性結構。
線上性結構中,資料元素之間存在著一對一的關係,其特點是資料元素之間按某種規定存在一個順序關係。
線性表的兩種儲存結構:順序表和連結串列。
定義: n個同型別資料元素的有限序列,記為:L=(a1,a2,a3…,ai…,an)。其中,n=0時為空表。
資料元素之間的關係: a(i-1)是ai的直接前驅,a(i+1)是ai的直接後繼,除第一個元素外,均有唯一的前驅;除最後一個元素外,均有唯一的後繼。
基本操作: 結構初始化、結構銷燬、引用型、操作型。
初始化和銷燬:

Status List_Init(sq L);
void List_Clear(sq L);
void List_Destroy(sq L);

引用型:

bool List_Empty(sq L);//判斷是否為空
int List_Size(sq L);//求長度
Status List_Retrival(sq L,int pos ElemType *elem);//從線性表pos位置中取出資料放到elem指標中
Status List_Locate(sq L,ElemType elem, int *pos);//線上性表L中定位elem的位置,把位置放到pos指標中
Status List_Prior(sq L,int pos ElemType *elem);//求線性表L中pos位置上資料的直接前驅
Status List_Next(sq L,int pos ElemType *elem);//求線性表L中pos位置上資料的直接後繼

加工型:

Status List_Insert(sq L,int pos,ElemType elem);
Status List_delete(sq L,int pos);

線性表的順序儲存結構: 用一組地址連續的儲存單元,依次存放線性表中的資料元素。
優勢:隨機存取資料。
在這裡插入圖片描述
實現順序儲存:

#define list_init_size 100//定義線性表空間大小
#define list_increament 10//定義空間增量大小
typedef int ElemType;
typedef struct sq{
ElemType *elem;
int length;//線性表長度,初始時為空
int list_size;//線性表空間大小
}sq,*p;
typedef p sq;

建立線性表:
時間複雜度:O(1)

Status list_init(sq L){
    Status s=success;
    L->list_size=list_init_size;
    L->length=0;//初始化線性表長度
    L->elem=(ElemType *)malloc(sizeof(ElemType)*L->list_size);
    if(L->elem==NULL)//若分配記憶體失敗,返回fatal,嚴重錯誤
        s=fatal;
    return s;
}

按位置查詢:
時間複雜度:O(1)

Status list_retrival(sq L,int pos,ElemType *elem)
{
    Status s=range_error;//初始時查詢失敗
    if(L){//線性表存在的情況下
        if((pos-1)>=0&&(pos-1)<L->length){
            *elem=L->elem[pos-1];//pos-1元素放到elem指標中
            s=success;
        }
    }
        else
            s=fatal;//若線性表不存在,返回錯誤
        return s;
}

按值查詢:
時間複雜度:O(N)

Status list_locate(sq L,ElemType elem,int *pos)
{
    Status s=range_error;
    if(L){
        for(int i=0;i<L->length;++i){//從0到length-1的位置查詢是否有這個值
            if(L->elem[i]==elem){
                *pos=i+1;//若是,pos+1,跳出迴圈
                s=success;
                break;
            }
        }
    }
    else
        s=fatal;
    return s;
}

相關文章