西安科技大学824数据结构代码题(自用)2017

 (要求:用自然语言说明算法设计思路,给出算法用的数据结构定义,并做出必要的注释。用C语言写出对应的算法函数,说明时间复杂度并加上必要的注释)


1、设计算法将一个带头结点的单链表A分解成为两个具有相同结构的链表B,C。其中B表的结点是A表中值为奇数的结点,而表C的结点为A表中值为偶数的结点(链表A的元素类型为整型,要求BC表利用A表的结点)

算法设计思路
  1. 遍历带头结点的单链表A。
  2. 对于A中的每个结点,判断其存储的值是奇数还是偶数。
  3. 如果是奇数,将该结点从链表A中摘除,并将其插入到链表B的末尾。
  4. 如果是偶数,将该结点从链表A中摘除,并将其插入到链表C的末尾。
  5. 遍历完成后,链表A被分解为链表B和链表C。
  6. 时间复杂度:遍历链表A的时间复杂度为O(N),其中N是链表A的长度。在遍历过程中,每个结点被处理一次。
  7. 空间复杂度:除了输入和输出的链表外,算法的空间复杂度为O(1),因为只使用了固定的几个指针变量和局部变量。
#include <stdio.h>
#include <stdlib.h>

// 链表结点定义
typedef struct Node {
    int data;           // 结点存储的数据(整型)
    struct Node* next;  // 指向下一个结点的指针
} Node;

// 链表定义,包含头结点
typedef struct {
    Node* head;  // 指向链表头结点的指针
} LinkedList;

// 初始化链表,创建带头结点的空链表
void initLinkedList(LinkedList* list) {
    list->head = (Node*)malloc(sizeof(Node));
    list->head->next = NULL;
}

// 插入结点到链表末尾
void insertNode(LinkedList* list, int value) {
    Node* newNode = (Node*)malloc(sizeof(Node));
    newNode->data = value;
    newNode->next = NULL;
    
    Node* current = list->head;
    while (current->next != NULL) {
        current = current->next;
    }
    current->next = newNode;
}

// 分解链表A为链表B和链表C
void splitLinkedList(LinkedList* A, LinkedList* B, LinkedList* C) {
    Node* current = A->head->next;
    while (current != NULL
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值