設順序表中的數據元素遞增有序,試着寫一算法,將x插入到順序表上的適當位置上,以保持該表的有序性。


 原創,轉載請注明出處。https://www.cnblogs.com/yangf428/p/11254370.html

 

天勤例題【2-1】:

  設順序表va中的數據元素遞增有序。試寫一算法,將x插入到順序表的適當位置上,以保持該表的有序性
先建立一個待插入的結點,然后依次與與鏈表中的各結點的數據域比較大小,找到插入該結點的位置,最后插入該結點。
算法如下:

//設順序表中的數據元素遞增有序,
//試着寫一算法,將x插入到順序表上的適當位置上,
//以保持該表的有序性。
#include<stdio.h>
#include<cstring>
#define MaxSize 200
#define ElemType int
#define Status int
#define OK 1
#define ERROR 0
using namespace std;

typedef struct
{
    ElemType data[MaxSize];
    int length;
} SqList; //定義結構體

Status initList(SqList *L)
{
    L->length = 0;
    return 0;
}//初始化順序表

SqList createList(SqList * L, int n)
{
    int startNumber, step;
    printf("請輸入初始值和步長:\n");
    scanf("%d %d", &startNumber, &step);
    for(int i=0; i<n; i++)
    {
        L->data[i] = startNumber + (i)*step;
    }
    L->length = n;
    return *L;
}//建造順序表

void showList(SqList *L)
{
    for(int i=0; i<=L->length-1; i++)
    {
        printf("%d ", L->data[i]);
    }
    printf("\n\n\n");
}//屏幕輸出順序表

Status locateList(SqList *L, ElemType e)
{
    if(e <= L->data[0])
        return 0;
    if(e >= L->data[L->length - 1])
        return L->length;
    else
    {
        for(int i=0; i<L->length-1; i++)
        {
            if(e > L->data[i] && e <= L->data[i+1])
            {
                return i+1;
            }
        }
    }
}//定位某元素在數據表中的位置

Status inorderList(SqList *L, ElemType location, ElemType e)
{
    for(int i = L->length-1; i >= location; i--)
    {
        L->data[i+1] = L->data[i];
    }
    L->data[location] = e;
    L->length ++;
    return OK;
}//插入指定位置的數據

int main()
{

    SqList L;
    initList(&L);
    int n;
    printf("輸入順序表的元素個數:\n");
    scanf("%d",&n);
    createList(&L,n);
    showList(&L);
    while(true){
    printf("請輸入插入的元素:\n");
    int InputNumber;
    scanf("%d",&InputNumber);
    int Location=locateList(&L,InputNumber);
    inorderList(&L, Location, InputNumber);
    showList(&L);
    }

    return 0;
}

 

執行結果:

 

 

注意:一定要注意當值小於第一個、大於最后一個,還有和某個數相同的各種類似特殊情況,測試一定要全面!!

 這個算法過一段時間我會更一個更簡潔的。

 





 


免責聲明!

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



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