eg:順序表a:1 3 5 7
順序表b:2 4 6 8
合併後的表c:8 7 6 5 4 3 2 1
**思路:**從後往前遍歷順序表a和b,如果當前a表的數大於等於b表的數,則將a表的數存入c,a的元素下標往前移一位,否則,將b表的數存入c表,b的元素下標往前移一位b;最後再把其中乙個未遍歷完的表存入c表。
#include #include #include #define list_init_size 100 // 線性表儲存空間的初始分配量
#define listincrement 10 // 線性表儲存空間的初分配增量
#define overflow -1
#define ok 1
typedef int elemtype;
typedef int status;
typedef struct sqlist;
//初始化線性表
status initlist_sq(sqlist *l)
//建立有序表並賦值
void create_sq(sqlist *l)
l -> length = n; // 建立長度為n的順序表
printf("\n依次輸入這%d個數(從小到大輸入):\n", n);
for (int i = 0; i < n; i++)
}//輸出有序表
void print_sq(sqlist l)
printf("\n");
}//將兩個有序遞增的順序表合併為乙個有序遞減的順序表
void merge_sq(sqlist *la, sqlist *lb, sqlist *lc) else
} while (i >= 0)
while (j >= 0)
}int check_sq(sqlist *la)
return flag;
}int main()
printf("\n建立成功!\n");
printf("\n建立乙個有序表b\n");
create_sq(&lb); // 建立線性表lb
int ans1 = check_sq(&lb);
while (ans1 == 1)
printf("\n建立成功!\n");
printf("\n順序表a的資料:\n");
print_sq(la); // 輸出線性表la
printf("\n順序表b的資料:\n");
print_sq(lb); // 輸出線性表lb
merge_sq(&la, &lb, &lc); //將la順序表和lb順序表合併為乙個有序遞減的順序表lc
printf("\n順序表c的資料:\n");
print_sq(lc); // 輸出線性表lc
return 0;
}
將兩個遞增的有序鍊錶合併為乙個遞增的有序鍊錶
將兩個遞增的有序鍊錶合併為乙個遞增的有序鍊錶。要求結果鍊錶仍使用原來兩個鍊錶的儲存空間,不另外占用其它的儲存空間。表中不允許有重複的資料。void mergelist linklist la,linklist lb,linklist lc 取較小者la中的元素,將pa鏈結在pc的後面,pa指標後移 ...
將兩個有序順序表合併為乙個新的有序順序表
將兩個有序順序表合併為乙個新的有序順序表,並由函式返回合併後的順序表。非常經典的題目,哪怕死記硬背也應該記下來 按照順序不斷將兩個順序表表頭較小的那個存入新錶中,操作結束後,看哪個表還有剩餘,將剩下的部分加到新錶後面。線性表採用動態分配空間的方法,最大容量為maxsize。bool merge se...
鍊錶 將兩個遞增鍊錶合併為乙個遞減鍊錶
王道p38t13 主 linklist merge desc linklist a,linklist b else t next c next c next t if ap null r ap else r bp while r null return c 完整 include include us...