c 常用數據結構

                                                                                  常用數據結構

目錄

1.線性表

定義:

特點:(一對一的關係)

 1.1順序表

定義:

特點:

實現:

基本操作:

初始化順序表

求順序表中當前元素的個數

判斷順序表是否爲空

向順序表中插入數據元素

刪除順序表中的元素

查找指定元素在順序表中的位置

獲取順序表中指定位置上的數據元素

遍歷順序表


1.線性表

定義:

  • 由n個具有相同性質的數據元素組成的有窮序列

特點:(一對一的關係)

  • 存在唯一一個稱爲”第一個“的數據元素,它沒有直接的前驅。
  • 存在唯一一個稱爲“最後一個”的元素,他沒有直接後驅。
  • 除第一個數據元素以外,表中的每個數據元素有且僅有一個直接前驅
  • 除第一個數據元素以外,表中的每個數據元素有且僅有一個直接後驅

 1.1順序表

定義:

  • 一組地址連續的存儲單元依次存儲線性表中每個數據元素。

特點:

  •  邏輯關係相鄰的兩個元素在物理位置上也相鄰。

Image result for 順序表

實現:

typedef struct {
    int items[LISTSIZE];
    int length;
} SqList;
  • length:線性表當前的長度。
  • LISTSIZE:初始化時,順序表中最多含有LISTSIZE個元素。

基本操作:

  • 初始化順序表

//初始化順序表,表的長度設置爲0
void InitList(SqList *L)
{
    L->length=0;
}
  • 求順序表中當前元素的個數

//順序表的長度
int ListLength(SqList * L)
{
    return  L->length;
}
  • 判斷順序表是否爲空

//判斷順序表是否爲空
bool ListEmpty(SqList *L)
{
    if(L->length==0)
        return true;
    else
        return false;
}
  • 向順序表中插入數據元素

//向順序表中插入數據元素
bool ListInsert(SqList *L,int pos,int item)
{
    int i;
    if(L->length==LISTSIZE)
    {
        printf("順序列表已滿,無法進行插入操作");
        return false;
    }
    if(pos<1||pos>L->length+1)
    {
        printf("插入位置不合法");
        return false;
    }
    for(i=L->length-1;i>=pos-1;i--)
    {
        L->items[i+1]=L->items[i];
    }
    L->items[pos-1]=item;
    L->length++;

    return true;

}
  • 刪除順序表中的元素

//刪除順序表中的元素
bool ListDelete(SqList *L,int pos,int *item)
{
    int i;
    if(L->length==0)
    {
        printf("順序表爲空表");
        return false;
    }
    if(pos<1||pos>L->length)
    {
        printf("刪除位置無效");
    }
    *item=L->items[pos-1];
    for(int i=pos-1;i<L->length-1;i++)
    {
        L->items[i]=L->items[i+1];
    }
    L->length--;
    return true;
}
  • 查找指定元素在順序表中的位置

//查找制定元素在順序表中的位置
int Find(SqList L,int item)
{
    int pos=0;
    if(ListEmpty(&L))
    {
        printf("順序表爲空表,無法進行查找操作");
        return 0;
    }
    while(pos<L.length&&L.items[pos]!=item)
    {
        pos++;
    }
    if(pos<L.length)
        return pos+1;
    else
        return 0;
}
  • 獲取順序表中指定位置上的數據元素

//獲得順序表中指定位置上的數據元素
int GetElem(SqList *L,int pos,int *item)
{
    if(ListEmpty(L))
        return 0;
    if(pos<1||pos>L->length)
        return 0;
    *item=L->items[pos-1];
    return 1;
}
  • 遍歷順序表

//遍歷順序表
void TravereList(SqList *L)
{
    int pos =0;
    while(pos<L->length)
    {
        printf("item1: %d",L->items[pos]);
        pos++;
    }
}

#include <iostream>
using namespace std;
#define LISTSIZE 100


typedef struct {
    int items[LISTSIZE];
    int length;
} SqList;

//初始化順序表,表的長度設置爲0
void InitList(SqList *L)
{
    L->length=0;
}

//順序表的長度
int ListLength(SqList * L)
{
    return  L->length;
}

//判斷順序表是否爲空
bool ListEmpty(SqList *L)
{
    if(L->length==0)
        return true;
    else
        return false;
}

//向順序表中插入數據元素
bool ListInsert(SqList *L,int pos,int item)
{
    int i;
    if(L->length==LISTSIZE)
    {
        printf("順序列表已滿,無法進行插入操作");
        return false;
    }
    if(pos<1||pos>L->length+1)
    {
        printf("插入位置不合法");
        return false;
    }
    for(i=L->length-1;i>=pos-1;i--)
    {
        L->items[i+1]=L->items[i];
    }
    L->items[pos-1]=item;
    L->length++;

    return true;

}

//刪除順序表中的元素
bool ListDelete(SqList *L,int pos,int *item)
{
    int i;
    if(L->length==0)
    {
        printf("順序表爲空表");
        return false;
    }
    if(pos<1||pos>L->length)
    {
        printf("刪除位置無效");
    }
    *item=L->items[pos-1];
    for(int i=pos-1;i<L->length-1;i++)
    {
        L->items[i]=L->items[i+1];
    }
    L->length--;
    return true;
}

//查找制定元素在順序表中的位置
int Find(SqList L,int item)
{
    int pos=0;
    if(ListEmpty(&L))
    {
        printf("順序表爲空表,無法進行查找操作");
        return 0;
    }
    while(pos<L.length&&L.items[pos]!=item)
    {
        pos++;
    }
    if(pos<L.length)
        return pos+1;
    else
        return 0;
}

//獲得順序表中指定位置上的數據元素
int GetElem(SqList *L,int pos,int *item)
{
    if(ListEmpty(L))
        return 0;
    if(pos<1||pos>L->length)
        return 0;
    *item=L->items[pos-1];
    return 1;
}

//遍歷順序表
void TravereList(SqList *L)
{
    int pos =0;
    while(pos<L->length)
    {
        printf("item1: %d",L->items[pos]);
        pos++;
    }
}

int main()
{
    SqList Fibonacci;
    cout<<"建立順序表"<<endl;
    InitList(&Fibonacci);
    for(int i=0;i<7;)
    {
        int num;
        cin>>num;
        if(ListInsert(&Fibonacci,i+1,num))
            i++;
    }
    TravereList(&Fibonacci);
    int item;
    ListDelete(&Fibonacci,7,&item);
    TravereList(&Fibonacci);
    return 0;
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章