【 資料結構(C語言)】 線性表順序表示和實現

來源:互聯網
上載者:User

標籤:tde   def   增量   16px   malloc   listt   logs   include   pos   

1.線性表(linear_list):

特點:

在資料元素的非空有限集合中

  1. 存在惟一的一個被稱作“第一個”的資料元素;
  2. 存在惟一的一個被稱作“最後一個”的資料元素;
  3. 除第一個之外,集合中的每一個資料元素均只有一個前驅
  4. 除最後一個之外,集合中的每一個資料元素均只有一個後繼
2.線性表的順序表示:用一組地址連續的儲存單元依次儲存線性表的資料元素
#include <bits/stdc++.h>using namespace std;#define  LIST_INIT_SIZE 100 /// 線性表格儲存體空間的初始分配量#define  LISTINCREMENT 10   /// 線性表格儲存體空間的分配增量#define  Elemtype  int#define  Status  int#define  OK 1#define  ERROR -1#define  OVERFLOW -2typedef struct{    Elemtype *elem;    int length;    int listsize;}Sqlist;Status InitList_Sq(Sqlist &L){    L.elem = (Elemtype * )malloc(LIST_INIT_SIZE*sizeof(Elemtype));    if (!L.elem)    {       return OVERFLOW;    }    L.length = 0;    L.listsize = LIST_INIT_SIZE;    return OK;}Status DestroyList_Sq(Sqlist &L){   if (L.length > 0 )   {       free(L.elem);       free(&L);   }    return OK;}Status ClearList_Sq(Sqlist &L){    L.length = 0;    return OK;}Status IsEmptyList_Sq(Sqlist &L){    if (L.length == 0) return OK;    else return ERROR;}Status GetLengthList_Sq(Sqlist &L){    return L.length;}Status GetElem(Sqlist &L,int i,Elemtype  &e){    if (i < 1 || i > L.length + 1 ) return ERROR;    else    {        e = L.elem[i-1];        return OK;    }}Status ListInsert_Sq(Sqlist &L, int i, Elemtype  e){    if (i < 1 || i > L.length + 1 )return ERROR;    if (L.length >= L.listsize)    {        Elemtype  *newbase = (Elemtype *) realloc(L.elem,L.listsize + LISTINCREMENT * sizeof(Elemtype));        if (!newbase)        {            return OVERFLOW;        }        L.elem = newbase;        L.listsize += LISTINCREMENT;    }    int  *last = &L.elem[i-1];    for (int  *index = &(L.elem[L.length-1]); index >= last; index --)    {        *(index +1) = *index ;    }    *last  = e;    ++L.length;    return OK;}Status ListDeleteByPos_Sq(Sqlist &L,int i,Elemtype &e){    if (i < 1 || i > L.length) return ERROR;    int *pos = &L.elem[i-1];    e = *pos;    int *last = L.elem + L.length -1;    for (pos++; pos <= last; pos++)    {        *(pos-1) = *pos;    }    L.length--;    return OK;}Status ListDeleteByVal_Sq(Sqlist &L,Elemtype e){    int *index = &L.elem[0];    int *last = &L.elem[L.length-1];    for (; index <= last; index++)    {        if (*index == e)        {         for (int *k = index +1; k <= last;  k++)               *(k-1) = *k;         L.length--;         index--;///因為p的值已經更新了,需要在判斷一次        }    }    return OK;}Status ListTraverse_Sq(Sqlist &L){    for (int i=0; i<L.length; i++)    {       i<L.length-1 ? printf("%d ",L.elem[i]):printf("%d\n",L.elem[i]);    }    return OK;}int main(){    Sqlist Sq_list;    InitList_Sq(Sq_list);    int n;    scanf("%d",&n);    for (int i=0; i<n; i++)    {        int  val;        scanf("%d",&val);        ListInsert_Sq(Sq_list,i+1,val);    }    ListTraverse_Sq(Sq_list);    int dele_val,dele_pos;     scanf("%d",&dele_pos);     ListDeleteByPos_Sq(Sq_list,dele_pos,dele_val);     ListTraverse_Sq(Sq_list);    return 0;}

  

【 資料結構(C語言)】 線性表順序表示和實現

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.