ZBLOG

这里使用双向链表实现不同类型人员的排队排序: ```c #include #include typedef struct Node { int type; struct Node *prev; struct Node *next; }Node; Node *head = NULL, *tail = NULL; void add(int type) { Node *newNode = malloc(sizeof(Node)); ...

以下是补全代码实现双向链表排序的示例:

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. typedef struct Node {
  4. int type;
  5. struct Node *prev;
  6. struct Node *next;
  7. } Node;
  8. Node *head = NULL, *tail = NULL;
  9. void add(int type) {
  10. Node *newNode = malloc(sizeof(Node));
  11. newNode->type = type;
  12. if (head == NULL) {
  13. head = tail = newNode;
  14. newNode->prev = NULL;
  15. newNode->next = NULL;
  16. } else {
  17. tail->next = newNode;
  18. newNode->prev = tail;
  19. newNode->next = NULL;
  20. tail = newNode;
  21. }
  22. }
  23. void print() {
  24. Node *curr = head;
  25. printf("当前排队顺序:");
  26. while(curr != NULL) {
  27. printf(" %d", curr->type);
  28. curr = curr->next;
  29. }
  30. printf("\n");
  31. }
  32. void sort() {
  33. // 使用插入排序对双向链表进行排序
  34. if (head == NULL || head->next == NULL)
  35. return;
  36. Node *curr, *key, *temp;
  37. for (curr = head->next; curr != NULL; curr=curr->next) {
  38. key=curr;
  39. while(key != head && key->type < key->prev->type){
  40. temp=key -> prev -> prev;
  41. if(temp!=NULL)
  42. temp -> next=key;
  43. key -> prev=temp;
  44. temp=key -> prev -> next;
  45. if(temp!=NULL)
  46. temp -> prev=key;
  47. key -> next=temp;
  48. if(key==head){
  49. head=head -> prev;
  50. }
  51. key -> prev=NULL;
  52. temp=key ;
  53. }
  54. }
  55. }
  56. int main() {
  57. int input;
  58. printf("请输入排队的人员类型,-1表示结束输入:\n");
  59. while (scanf("%d", &input) == 1 && input != -1) {
  60. add(input);
  61. }
  62. print();
  63. sort();
  64. printf("排序后的顺序:");
  65. print();
  66. return 0;
  67. }

使用插入排序算法对双向链表进行排序,按照每个节点的type值进行升序排列。


内容由零声教学AI助手提供,问题来源于学员提问

本站部分文章来源于网络,版权归原作者所有,如有侵权请联系站长删除。
转载请注明出处:https://golang.0voice.com/?id=8933

分享:
扫描分享到社交APP
上一篇
下一篇
发表列表
游客 游客
此处应有掌声~
评论列表

还没有评论,快来说点什么吧~

联系我们

在线咨询: 点击这里给我发消息

微信号:3007537140

上班时间: 10:30-22:30

关注我们
x

注册

已经有帐号?