C語言——順序表插入、刪除、定位運算算法


說明:將元素x插入到順序表L的第i個數據元素之前,這個i是從1開始的,但是
程序中數組都是從0算起的,不要混淆了。

頭文件:

header.h

// 順序表的結構定義
#define Maxsize 100
//const int Maxsize = 100; // 預先定義一個足夠大的常數

typedef struct
{
    int data[Maxsize]; // 存放數組的數組
    int length; // 順序表的實際長度
}SeqList; // 順序表類型名為SeqList

// SeqList L 定義L為一個順序表

主體文件:

main.c

順序表插入

#include <stdio.h>
#include "header.h"

// 順序表插入運算
void InsertSeqlist(SeqList *L, int x, int i)
{
    int j;
    if(L->length == Maxsize) printf("表已滿");
    if(i < 1 || i > L->length + 1) printf("位置錯"); // 檢查插入位置是否合法
    for(j = L->length;j >= i;j--)
    {
        L->data[j] = L->data[j - 1]; // 整體依次向后移動
    }
    L->data[i - 1] = x;
    L->length++;
}

main()
{
    int i;
    int n = 5;
    SeqList s = {{1,2,3,4,5}, n};
    InsertSeqlist(&s, 99, 2);
    for(i = 0;i < n + 1;i++) {
        printf("%d\n", s.data[i]);
    }
    printf("\n");
}

 

 

刪除線性表中第i個數據結點

#include <stdio.h>
#include "header.h"

// 刪除線性表中第i個數據結點
void DeleteSeqList(SeqList *L, int i)
{
    int j;
    if(i < 1 || i > L->length) printf("非法位置\n");
    for(j = i;j < L->length;j++)
    {
        L->data[j - 1] = L->data[j]; // 依次左移
    }
    L->length--;
}

main()
{
    int i;
    int n = 5;
    SeqList L = {{1,2,3,4,5}, n};
    DeleteSeqList(&L, 2);
    for(i = 0;i < n - 1;i++)
    {
        printf("%d\n", L.data[i]);
    }
}

 

在順序表中查找值為x的結點

#include <stdio.h>
#include "header.h"

// 在順序表中查找值為x的結點
int LocateSeqList(SeqList L, int x)
{
    int i = 0;
    while(i < L.length && L.data[i] != x) i++;
    if(i < L.length) return i + 1;
    else return 0;
}

main()
{
    SeqList L = {{100, 58, 102, 99, 2}, 5};
    printf("%d\n", LocateSeqList(L, 2)); // 5
}

 


免責聲明!

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



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