c語言將兩個遞增的順序表合併為乙個遞減的順序表

2021-09-19 15:37:34 字數 1454 閱讀 9685

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...