请用C语音数据结构写一个代码,已知两顺序表SA、SB,其元素均为递增有序,将此两表归并成一个新的顺序表SC,并保持递增顺序。2.基本要求输入按非递减有序的两顺序表SA、SB,
时间: 2024-09-11 07:18:19 浏览: 48
在C语言中,你可以使用两个指针分别遍历顺序表SA和SB,然后比较当前指针所指向的元素,将较小的元素添加到新序列SC中,同时移动相应的指针。当其中一个表的所有元素都添加完后,将另一个表剩余的部分直接复制到SC中。以下是一个简单的示例代码:
```c
#include <stdio.h>
#include <stdlib.h>
// 定义顺序表节点结构体
typedef struct ListNode {
int data;
struct ListNode* next;
} ListNode;
// 归并函数
ListNode* mergeSortedList(ListNode* SA, ListNode* SB) {
// 初始化合并后的链表头指针
ListNode* SC = (ListNode*)malloc(sizeof(ListNode));
SC->data = SA->data; // 先将SA的第一个元素添加到SC
SC->next = NULL;
ListNode* SAcur = SA;
ListNode* SBcur = SB;
while (SAcur && SBcur) { // 当两者都有元素时
if (SAcur->data <= SBcur->data) {
ListNode* temp = SAcur;
SAcur = SAcur->next;
} else {
ListNode* temp = SBcur;
SBcur = SBcur->next;
}
// 将较小元素添加到SC
temp->next = SC->next;
SC->next = temp;
}
// 如果还有剩下的元素,直接添加到SC
if (SAcur) {
ListNode* temp = SAcur;
while (temp) {
temp->next = SC->next;
SC->next = temp;
temp = temp->next;
}
} else if (SBcur) {
ListNode* temp = SBcur;
while (temp) {
temp->next = SC->next;
SC->next = temp;
temp = temp->next;
}
}
return SC;
}
// 测试函数
void printList(ListNode* list) {
while (list) {
printf("%d ", list->data);
list = list->next;
}
printf("\n");
}
int main() {
// 假设SA和SB已经初始化为递增有序的顺序表
ListNode* SA = ...;
ListNode* SB = ...;
ListNode* SC = mergeSortedList(SA, SB);
printList(SC);
// 分别释放SA和SB的内存
free(SA);
free(SB);
return 0;
}
```
注意:这个代码假设`SA`和`SB`是已经创建好的递增有序的单向链表。在实际应用中,你需要先创建链表并填充数据,然后传递给`mergeSortedList`函数。
阅读全文