数据以链表方式存储,编写链表插入排序算法(需预先创建符合要求的单链表)。
1条回答 默认 最新
- LiangLliu 2019-12-20 13:14关注
你好,问题解决了没,计算机机考应该用的C语言吧,我写了一个C语言的代码。你看看对你有没有帮助。
**展示效果: ****代码如下: **
/** * C语言实现 */ #include <stdio.h> #include <stdlib.h> // #include<malloc.h> // 苹果系统下不用导入这个库函数,如果是windows,取消掉注释 // 定义结构体 struct ListNode { int val; struct ListNode *next; }; // 单链表排序算法 struct ListNode* SortList(struct ListNode* head){ struct ListNode *tmp, *cur, *pre, *next; if (!head) return NULL; cur = head->next; head->next = NULL; while(cur) { pre = head; next = cur->next; for (tmp=head; ; tmp=tmp->next) { if (!tmp) { cur->next = NULL; pre->next = cur; break; } if (tmp->val > cur->val) { if (tmp == head) { cur->next = head; head = cur; } else { cur->next = pre->next; pre->next = cur; } break; } pre=tmp; } cur = next; } return head; } // 创建链表 struct ListNode* createList(){ struct ListNode *head,*p,*q; int len; head =(struct ListNode *)malloc(sizeof(struct ListNode)); // 创建新的空间 printf("需要排序的元素个数:\n"); scanf("%d",&len); printf("请输入元素\n"); scanf("%d",&head->val); p = head; for (int i = 1; i < len; ++i) { q =(struct ListNode *)malloc(sizeof(struct ListNode)); scanf("%d",&q->val); p->next = q; // 当前指针指向下一个元素 p = q; } p->next = NULL; return head ; } // 打印链表 void printList(struct ListNode *head) { struct ListNode* p; p=head; if(p==NULL) { printf("链表中没有元素\n"); } else { while(1) { printf("%d\t",p->val); if(p->next != NULL) { p=p->next; } else { break; } } } } // 主函数 int main() { struct ListNode* head , *sortHead; // 创建链表 head = createList(); printf("\n-----排序前-----\n\n"); printList(head); // 对链表进行排序 printf("\n-----排序后-----\n\n"); sortHead = SortList(head); printList(sortHead); return 0 ; }
解决 无用评论 打赏 举报
悬赏问题
- ¥15 交替优化波束形成和ris反射角使保密速率最大化
- ¥15 树莓派与pix飞控通信
- ¥15 自动转发微信群信息到另外一个微信群
- ¥15 outlook无法配置成功
- ¥30 这是哪个作者做的宝宝起名网站
- ¥60 版本过低apk如何修改可以兼容新的安卓系统
- ¥25 由IPR导致的DRIVER_POWER_STATE_FAILURE蓝屏
- ¥50 有数据,怎么建立模型求影响全要素生产率的因素
- ¥50 有数据,怎么用matlab求全要素生产率
- ¥15 TI的insta-spin例程