順序表插入、刪除算法用C語言來實現


#include<stdio.h>

#include<stdlib.h>

//-------- 線性表的動態分配順序存儲結構 -----------

int LIST_INIT_SIZE=100;   //順序表存儲空間初始尺寸

int LISTINCREMENT=10;  //順序表存儲空間分配增量

typedef  int  ElemType;          //順序表元素的數據類型為整數

//存儲結構定義:順序表

typedef struct {

       ElemType *elem;  //存儲線性表元素的數組

       int length;        //表長度

       int listsize;       //存儲容量

       int incrementsize;  //擴展增量

} SqList;

//-------- 線性表的基本運算 -----------------------------

//輔助函數:顯示順序表元素

void print_Sq (SqList L) {

       for(int i=0; i<L.length; i++)  printf("%5d", L.elem[i]);

       printf("\n");

}

//運算1:初始化空順序表L

void InitList_Sq(SqList *L, int initsize, int incresize) {// 算法2.4

  L->elem = (ElemType *)malloc(initsize*sizeof(ElemType)); //分配數組空間

  L->length=0;  //表長度初值為0

  L->listsize=initsize; //表空間初始尺寸

  L-> incrementsize = incresize;

}

//運算2:銷毀順序表L// 算法2.8

void DestroyList_Sq(SqList *L) {

  free(L->elem); //釋放表的數組存儲空間

       L->elem=NULL; //清空指向數組的指針及表示表長度、數組尺寸的指示變量

       L->length=0;

       L->listsize=0;

}

//運算3:在順序表L中第i個位置前插入新元素e

void ListInsert_Sq (SqList *L,  int i,  ElemType  e) {

if(i < 1 || i > L->length+1)

        return ERROR;//   i值不合法

       //動態擴展空間,每次空間不足,空間長度增加 LISTINCREMENT

    if(L->length == L->listsize)

    {

        ElemType * increspace = (ElemType *)realloc(L->elem,(L->listsize + LISTINCREMENT) * sizeof(ElemType));

        if(! increspace)

            exit(OVERFLOW);

        L->elem = increspace;

        L->listsize += LISTINCREMENT;

    }

       for(int j=L->length-1;j>i-1;j--)

       {

              L->elem[j+1]=L->elem[j];

       }

       L->elem[i-1]=e;

       L->length++;

       return OK;

}

//運算4:在順序表L中刪除第i個元素,用輸出變量e返回其值

void ListDelete_Sq (SqList *L,  int i,  ElemType*  e) { //算法2.7

       *e=L->elem[i-1];

       printf("刪除的第%d的元素為:%d\n",i,*e);

       for(int j=i-1;j<L->length;j++)

       {

              L->elem[j]=L->elem[j+1];

       }

       L->length--;

}

//運算5:在順序表L中找到第i個值與e相等的元素,返回其位序,否則返回0

int LocateElem_Sq (SqList  L,  ElemType  e) { //算法2.5

for(int i=0;i<L.length;i++)

       {

              if(L.elem[i]==e)

                     return i+1;

       }

       return 0;

}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM