順序存儲基本操作2

順序存儲結(jié)構(gòu)的常見操作,使用c語言實現(xiàn)

1、定義

#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
#define true 1
#define false 0
#define MaxSize 10 //定義順序表的最大長度
typedef int bool;
typedef int ElemType ;
//定義順序表結(jié)構(gòu)
typedef struct _SeqList{
    ElemType *data;//指示動態(tài)分配數(shù)組的指針
    int size;// 順序表的有效個數(shù)
}SeqList;

2、初始化

/**
 * 功能:初始化鏈表
 * 返回值:如果成功,則返回鏈表的地址,如果失敗退出
 */
 SeqList* InitList_Sq(){
    SeqList *pList=NULL;
    pList=(SeqList*)malloc(sizeof(SeqList));
    if(!pList){
        printf("分配內(nèi)存空間失??!");
        exit(0);
    }
    pList->data=(ElemType*)malloc(sizeof(ElemType)*MaxSize);
    if(pList->data==NULL){
         printf("pList->data動態(tài)內(nèi)存分配失??!\n");
         pList=NULL;
         free(pList);
         exit(0);
    }
    pList->size=0;
    printf("初始化成功\n");
    return pList;
 }

3、判斷空表

/**
 * 功能:判斷鏈表是否是空表
 * 參數(shù):鏈表地址
 * 返回值:true 是  false 否
 */
bool IsEmpty_Sq(SeqList *pList){
    if(pList==NULL){
        printf("錯誤:鏈表未初始化!");
        exit(0);
    }
    if(pList->size==0){
        return true;
    }
    return false;
 }

4、判斷是否已經(jīng)滿

/**
 * 功能:判斷鏈表是否是已滿
 * 參數(shù):鏈表地址
 * 返回值:true 是  false 否
 */
bool IsFull_Sq(SeqList *pList){
    if(pList==NULL){
        printf("錯誤:鏈表未初始化!");
        exit(0);
    }
    if(pList->size==MaxSize){
        printf("鏈表空間已滿\n");
        return true;
    }
    return false;
 }

5、順序表長度

  /**
 * 功能:獲取鏈表長度
 * 參數(shù):鏈表地址
 * 返回值:鏈表長度
 */
int Length_Sq(SeqList *pList){
    if(pList==NULL){
        printf("錯誤:鏈表未初始化!");
        exit(0);
    }
    return pList->size;
 }

6、插入操作


image.png
  /**
 * 功能:向鏈表插入數(shù)據(jù)元素 前置條件:鏈表已初始化,1<=index<=pList->size+1
 * 參數(shù):鏈表地址 下標(biāo)  插入的元素
 * 返回值:鏈表長度
 */
bool Insert_Sq(SeqList *pList,int index, ElemType e){
    //前置條件
    if(pList==NULL){
        printf("錯誤:鏈表未初始化!\n");
        return false;
    }
    if(IsFull_Sq(pList)){
        return false;
    }
    if(index<1||index>pList->size+1){
         printf("數(shù)組下標(biāo)越界\n");
         return false;
    }
    //開始插入
    if(!IsEmpty_Sq(pList)){//空表只能插到1的位置
        if(index<pList->size+1){//將要插入的元素位置往后的元素往后移動 往最后面添加一個元素?zé)o需移動
            for(int i=pList->size-1;i>=index-1;i--){
                pList->data[i+1]=pList->data[i];
            }
        }
    }
    pList->data[index-1]=e;
    pList->size++;//鏈表有效個數(shù)加1
    return true;
 }

7、刪除操作


image.png
  /**
 * 功能:向鏈表刪除數(shù)據(jù)元素 前置條件:鏈表已初始化,1<=index<=pList->size
 * 參數(shù):鏈表地址 下標(biāo)  刪除的元素
 * 返回值:true 成功 false 失敗
 */
bool Delete_Sq(SeqList *pList,int index,ElemType *pVal){
    //前置條件
    if(pList==NULL){
        printf("錯誤:鏈表未初始化!\n");
        return false;
    }
    if(IsEmpty_Sq(pList)){
        printf("錯誤:鏈表為空,不能刪除!\n");
        return false;
    }
    if(index<1||index>pList->size){
         printf("數(shù)組下標(biāo)越界\n");
         return false;
    }
    printf("刪除的元素為%d\n",pList->data[index-1]);
    *pVal=pList->data[index-1];
    //執(zhí)行刪除 index位置之后的向前移動一個位置
    for(int i=index-1;i<pList->size;i++){
        pList->data[i]=pList->data[i+1];
    }
    pList->size--;//鏈表有效個數(shù)減1
    return true;
 }

8、查找元素

/**
 * 功能:查找元素,返回下標(biāo)
 * 參數(shù):鏈表地址 元素
 * 返回值: 下標(biāo) -1 為查找不到
 */
int Search_Sq(SeqList *pList,ElemType e){
    //前置條件
    if(pList==NULL){
        printf("錯誤:鏈表未初始化!\n");
        return -1;
    }
    if(IsEmpty_Sq(pList)){
        return -1;
    }
    for(int i=0;i<pList->size;i++){
        if(e==pList->data[i]){
            return i;
        }
    }
    return -1;

}

9、獲取下標(biāo)的元素

/**
 * 功能:獲取某個下標(biāo)的元素
 * 參數(shù):鏈表地址 下標(biāo)
 * 返回值: 元素
 */
int getElem(SeqList *pList,int index,ElemType *e){
    //前置條件
    if(pList==NULL){
        printf("錯誤:鏈表未初始化!\n");
        return false;
    }
    if(IsEmpty_Sq(pList)){
        printf("錯誤:鏈表為空,不能刪除!\n");
        return false;
    }
    if(index<1||index>pList->size){
         printf("數(shù)組下標(biāo)越界\n");
         return false;
    }
    return pList->data[index-1];

}

10、遍歷

/**
 * 功能:遍歷鏈表
 * 參數(shù):鏈表地址
 */
void Show_Sq(SeqList *pList){
        //前置條件
    if(pList==NULL){
        printf("錯誤:鏈表未初始化!\n");
        return;
    }
    bool flag=true;
    printf("[");
    for(int i=0;i<pList->size;i++){
        if(flag){
            printf("%d",pList->data[i]);
            flag=false;
        }else{
            printf(",%d",pList->data[i]);
        }
    }
    printf("]\n");
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容