天勤论坛高分笔记 2016 版,第 25 页,例 2-1。
描述:已知一个顺序表L,其中的元素递增有序排列,设计一个算法,插入一个元素x(x为int型)后保持该顺序表仍然递增有序排列(假设插入操作总能成功)。
c
/* Page 25, Example 2-1. */ #include "stdio.h" #define maxSize 50 typedef struct // 顺序表的定义 { int data[maxSize]; int length; }Sqlist; void init(Sqlist &sl) // 初始化顺序表(粗糙地) { int len = 10; for(int i=1; i<=len; ++i) { sl.data[i] = i*3-2; } sl.length = len; } int locate(Sqlist sl, int num) // 定位恰当的插入位置 { int i=1; for(; i<=sl.length; ++i) { if(sl.data[i]>num) { return i; //break; } } return i; // 即使目前顺序表没有值较 num 大,也能正确返回下标 } int insert(Sqlist &sl, int loc, int num) // 往顺序表 sl 的 loc 位置插入值为 num 的元素 { int index=sl.length; if(loc<1 || loc>sl.length+1){ // 合法的位置应该在 1~sl.length+1 之间(有可能在顺序表的末尾追加) return 0; } while(index>=loc){ // 从后往前移,保证数据不被冲掉 sl.data[index+1]=sl.data[index]; index--; } sl.data[loc]=num; sl.length++; return 1; } void printSqlist(Sqlist sl) { int len=sl.length; for(int i=1; i<=len; i++){ printf("%d,", sl.data[i]); } printf(";Length: %d\n", sl.length); } int main() { Sqlist sl; int num; printf("A number: "); scanf("%d", &num); init(sl); printf("Before: \n"); printSqlist(sl); if(insert(sl, locate(sl, num), num) == 1) { printf("After:\n"); printSqlist(sl); } return 0; }
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。