C語言實現對順序表的增刪改查


C語言實現對順序表的增刪改查


順序表的概念

  • 采用順序儲存結構的線性表稱為順序表,他的數據元素按照邏輯順序依次有放在一組連續的儲存單元之中。邏輯上相鄰的數據元素,其儲存位置也彼此相鄰

順序表的主要算法

(1).在表中第i個位置插入新元素x

  • 第一步,判斷插入位置的合理性以及表是否已滿;
  • 第二步,從最后一個元素開始依次向前,將每個元素向后移動一個位置,直到第i個元素位置;
  • 第三步,向空出的第i個位置存入新元素x;
  • 第四步,最后還要將線性表長度加1;
    代碼如下:
int Insert(int line[],int num,int length,int place){
    if(num<1||num>length+1){
        return -1;
    }else{
        int j;
        for(j=length-1;j>=place-1;j--){
            line[j+1]=line[j];
        }
        line[place-1]=num;
        return 1;
    }
}

(2).在表中刪除第i個元素
- 第一步,判斷刪除位置的合理性;
- 第二步,從第i+1個元素開始,依次向后直到最后一個元素為止,將每個元素向前移動一個位置,這是第i個元素已經被刪除覆蓋;
- 第三步,最后還要將線性表長度減1;
代碼如下:

int Delete(int line[],int num,int length){
    if(num<0||num>length){
        return 2;
    }else{
        int j;
        for(j=num;j<=length-1;j++){
            line[j-1]=line[j];
        }
        return 1;
    }
}

(3).在表中查找某個元素

  • 查找元素的情況相較於前面的算法來說相對要復雜一些。如果數據元素是整數、實數這些基本數據類型,那么查找元素時自然就是與數據元素本身進行對比。如果數據元素是包含多個屬性的結構體或者對象,那么查找元素往往是與數據元素的某個屬性比較。接下來演示的是相對的數據元素的直接比較的情況。
    代碼如下
int Search(int line[],int num,int length){
    int i;
    for(i=0;i<=length;i++){
        if(line[i]==num){
            return i;
        }
    }
    return -1;
}

接下來貼出完整的示例代碼:

#include <stdio.h>
#include <stdlib.h>
#define N 30
int Search(int line[],int num,int length);//傳入數組,需要查找的元素,數組長度,
int Delete(int line[],int num,int length);//傳入數組,需要刪除的元素位置,數組長度
int Insert(int line[],int num,int length,int place);//傳入數組,需要插入的數值,數組長度,插入位置
int Alter(int line[],int num,int length,int place);//傳入數組,需要修改為的值,數組長度,修改的位置
void ReadLine(int line[],int length);//讀取輸入
void PrintLine(int line[],int length);//打印數組
int main()
{
    int n,m,num;
    int line[N];
    int length,place;
    while(1){
        printf("你需要執行的功能:\n1:刪除一個元素\n2.查找一個元素\n3.輸入數組元素\n4.查看數組元素\n5.插入一個元素\n6.修改數組中的元素\n");
        scanf("%d",&n);
        switch(n){
            case 1:
                printf("輸入你需要刪除的元素坐標\n");
                scanf("%d",&num);
                printf("\n");
                m=Delete(line,num,length);
                if(m!=2){
                    printf("success\n");
                    length=length-1;
                }else{
                    printf("false\n");
                }
                break;
            case 2:
                printf("輸入需要查找的元素\n");
                scanf("%d",&num);
                m=Search(line,num,length);
                if(m<0){
                    printf("false!",m);
                }else{
                    printf("%d\n",m);
                }
                break;
            case 3:
                printf("輸入數組長度\n");
                scanf("%d",&length);
                ReadLine(line,length);
                break;
            case 4:
                PrintLine(line,length);
                break;
            case 5:
                printf("輸入您需要插入的位置\n");
                scanf("%d",&place);
                printf("輸入您需要在該位置插入的元素");
                scanf("%d",&num);
                m=Insert(line,num,length,place);
                if(m>=0){
                    printf("插入成功\n");
                }else{
                    printf("插入失敗\n");
                }
                length=length+1;
                break;
            case 6:
                printf("輸入你需要修改的元素位置\n");
                scanf("%d",&place);
                printf("輸入用來替換該位置的元素\n");
                scanf("%d",&num);
                m=Alter(line,num,length,place);
                if(m>=0){
                    printf("修改成功\n");
                }else{
                    printf("修改失敗\n");
                }
                break;
            default:
                printf("輸入錯誤,請重啟程序!\n");
                return 0;

        }
    }
}
int Alter(int line[],int num,int length,int place){
    if(num<1||num>length+1){
        return -1;
    }else{
        line[place]=num;
        return 1;
    }
}
int Delete(int line[],int num,int length){
    if(num<0||num>length){
        return 2;
    }else{
        int j;
        for(j=num;j<=length-1;j++){
            line[j-1]=line[j];
        }
        return 1;
    }
}
int Insert(int line[],int num,int length,int place){
    if(num<1||num>length+1){
        return -1;
    }else{
        int j;
        for(j=length-1;j>=place-1;j--){
            line[j+1]=line[j];
        }
        line[place-1]=num;
        return 1;
    }
}
void ReadLine(int line[],int length){
    int i;
    for(i=0;i<length;i++){
        printf("輸入數組元素\n");
        scanf("%d",&line[i]);
    }

}
int Search(int line[],int num,int length){
    int i;
    for(i=0;i<=length;i++){
        if(line[i]==num){
            return i;
        }
    }
    return -1;
}
void PrintLine(int line[],int length){
    int i;
    if(length>=N){
        printf("沒有數組,請創建數組\n");
    }else{
        for(i=0;i<length;i++){
            printf("%3d",line[i]);
        }
        printf("\n");
    }

}


免責聲明!

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



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