天天看點

資料結構-線性表(List)1

線性表(list):零個或多個元素(相同的資料類型)的有限序列(有先後順序)。

線性表的基本操作:

線性表的基本操作:

Operation: 傳回值:
InitList(*L) 建立一個空的線性表
ListEmpty(L) 若為空,則傳回true,否則傳回false
ClearList(*L) 清空list
GetElem(L,i,*e) 傳回第i個元素值給e,成功返1否返0
LocateElem(L,e) 若有e,傳回序号,否則傳回0
ListInsert(*L,i,e) 插入元素e
ListDelete(*L,i,*e) 删除第i個元素,傳回其值e
ListLength(L) 傳回線性表元素個數

1、 線性表的順序存儲結構:用一段位址連續的存儲單元依次存儲線性表的資料元素。

(C語言之typedef:ypedef可以看作type define的縮寫,顧名思義就是類型定義,也就是說它隻是給已有的類型重新定義了一個友善使用的别名,并沒有産生新的資料類型。

typedef的使用與宏定義define有些許的相似,但兩者又有以下不同:

1.與#define不同,typedef給出的符号名稱僅限于對類型,而不是對值。

2.typedef的解釋由編譯器,而不是預處理器執行。

3.typedef比#define更靈活。)

(結構體成員變量的通路,->前面放的是指針,而.前面跟的是結構體變量,如已定義了一個結構體struct student,裡面有一個int a;然後有一個結構體變量struct student stu及結構體變量指針struct student *p;且有p=&stu,那麼p->a(等價于(*p).a)和stu.a表示同一個意思。)

#include<stdio.h>
/*線性表結構*/
#define MAXSIZE 
typedef int ElemType;
typedef struct{
    ElemType data[MAXSIZE];
    int length;
}SqList;
/***********/
/*查找*/
int GetElem(SqList L,int i,ElemType *e)
{
    if(L.length==||i<||i>L.length)
        return ;
    *e=L.data[i-];
    return ;
}
/******/
/*插值*/
int ListInsert(SqList *L,int i,ElemType e)
{
    int k;
    if(L->length==MAXSIZE)
        return ;
    if(i<||i>L->length+)
        return ;
    if(i<=L->length)
    {
        for(k=L->length;k>=i;k--)
            L->data[k]=L->data[k-];
    }
    L->data[i-]=e;
    L->length++;
    return ;
}
/******/
/*删除元素*/
int ListDelete(SqList *L,int i,ElemType *e)
{
    int k;
    if(L->length==)
        return ;
    if(i<||i>L->length)
        return ;
    *e=L->data[i-];
    if(i<L->length)
    {
        for(k=i;k<L->length;k++)
            L->data[k-]=L->data[k];
    }
    L->length--;
    return ;
}
/**********/
void main()
{
    SqList L1;
    SqList *PL1;
    ElemType e1;
    ElemType *pe;
    int p = ;
    int j;
    pe = &p;//注意,記得指針使用前需要初始化
    PL1=&L1;
    for(j=;j<;j++)
    {
        L1.data[j]=j+;
    }
    //e=&L1.data[5];
    L1.length=;
    GetElem(L1,,pe);
    printf("GetElem 5 =%d\n",*pe);//printf("%d\n",p);
    ListInsert(PL1,,);
    ListDelete(PL1,,pe);
    printf("GetElem 5 =%d\n",*pe);
    for(j=;j<L1.length;j++)
    {
        printf("L1.data[%d]=%d\n",j,L1.data[j]);
    }
    getchar();
}
           

繼續閱讀