原創,轉載請注明出處。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; }
執行結果:

注意:一定要注意當值小於第一個、大於最后一個,還有和某個數相同的各種類似特殊情況,測試一定要全面!!
這個算法過一段時間我會更一個更簡潔的。
