c資料結構鏈式儲存-靜態鏈表

來源:互聯網
上載者:User

標籤:

#include "string.h"#include "ctype.h"      #include "stdio.h"    #include "stdlib.h"   #include "io.h"  #include "math.h"  #include "time.h"#define OK 1#define ERROR 0#define TRUE 1#define FALSE 0#define MAXSIZE 1000 /* 儲存空間初始分配量 */typedef int Status;           /* Status是函數的類型,其值是函數結果狀態碼,如OK等 */typedef char ElemType;        /* ElemType類型根據實際情況而定,這裡假設為char */Status visit(ElemType c){    printf("%c ",c);    return OK;}/* 線性表的靜態鏈表格儲存體結構 */typedef struct {    ElemType data;    int cur;  /* 遊標(Cursor) ,為0時表示無指向 */} Component,StaticLinkList[MAXSIZE];/* 將一維數組space中各分量鏈成一個備用鏈表,space[0].cur為頭指標,"0"表示null 指標 */Status InitList(StaticLinkList space) {    int i;    for (i=0; i<MAXSIZE-1; i++)          space[i].cur = i+1;    space[MAXSIZE-1].cur = 0; /* 目前靜態鏈表為空白,最後一個元素的cur為0 */    return OK;}/* 若備用空間鏈表非空,則返回分配的結點下標,否則返回0 */int Malloc_SSL(StaticLinkList space) {     int i = space[0].cur;                   /* 當前數組第一個元素的cur存的值 */                                            /* 就是要返回的第一個備用閒置下標 */    if (space[0]. cur)                 space[0]. cur = space[i].cur;       /* 由於要拿出一個分量來使用了, */                                            /* 所以我們就得把它的下一個 */                                            /* 分量用來做備用 */    return i;}/*  將下標為k的空閑結點回收到備用鏈表 */void Free_SSL(StaticLinkList space, int k) {      space[k].cur = space[0].cur;    /* 把第一個元素的cur值賦給要刪除的分量cur */    space[0].cur = k;               /* 把要刪除的分量下標賦值給第一個元素的cur */}/* 初始條件:靜態鏈表L已存在。操作結果:返回L中資料元素個數 */int ListLength(StaticLinkList L){    int j=0;    int i=L[MAXSIZE-1].cur;    while(i)    {        i=L[i].cur;        j++;    }    return j;}/*  在L中第i個元素之前插入新的資料元素e   */Status ListInsert(StaticLinkList L, int i, ElemType e)   {      int j, k, l;       k = MAXSIZE - 1;   /* 注意k首先是最後一個元素的下標 */    if (i < 1 || i > ListLength(L) + 1)           return ERROR;       j = Malloc_SSL(L);   /* 獲得空閑分量的下標 */    if (j)       {           L[j].data = e;   /* 將資料賦值給此分量的data */        for(l = 1; l <= i - 1; l++)   /* 找到第i個元素之前的位置 */           k = L[k].cur;                   L[j].cur = L[k].cur;    /* 把第i個元素之前的cur賦值給新元素的cur */        L[k].cur = j;           /* 把新元素的下標賦值給第i個元素之前元素的ur */        return OK;       }       return ERROR;   }/*  刪除在L中第i個資料元素   */Status ListDelete(StaticLinkList L, int i)   {     int j, k;       if (i < 1 || i > ListLength(L))           return ERROR;       k = MAXSIZE - 1;       for (j = 1; j <= i - 1; j++)           k = L[k].cur;       j = L[k].cur;       L[k].cur = L[j].cur;       Free_SSL(L, j);       return OK;   } Status ListTraverse(StaticLinkList L){    int j=0;    int i=L[MAXSIZE-1].cur;    while(i)    {            visit(L[i].data);            i=L[i].cur;            j++;    }    return j;    printf("\n");    return OK;}int main(){    StaticLinkList L;    Status i;    i=InitList(L);    printf("初始化L後:L.length=%d\n",ListLength(L));    i=ListInsert(L,1,‘F‘);    i=ListInsert(L,1,‘E‘);    i=ListInsert(L,1,‘D‘);    i=ListInsert(L,1,‘B‘);    i=ListInsert(L,1,‘A‘);    printf("\n在L的表頭依次插入FEDBA後:\nL.data=");    ListTraverse(L);     i=ListInsert(L,3,‘C‘);    printf("\n在L的“B”與“D”之間插入“C”後:\nL.data=");    ListTraverse(L);     i=ListDelete(L,1);    printf("\n在L的刪除“A”後:\nL.data=");    ListTraverse(L);     printf("\n");    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.