作业社区
探索学习新天地,共享知识资源!
Latesumme 的学生作业:
练习1: #include #include #include #define N 6 typedef struct tree_node { int n; struct tree_node *left; struct tree_node *right; }tree_node; tree_node *create_tree_node(int n) { if(n > N) return NULL; tree_node *root = NULL; root = (tree_node *)malloc(sizeof(tree_node)); memset(root,0,sizeof(tree_node)); root->left = root->right = NULL; root->n = n; if(2 * n left = create_tree_node(2 * n); if(2 * n + 1 right = create_tree_node(2 * n + 1); return root; } int tree_deep(tree_node *root) { if(root == NULL) return 0; int left_deep = tree_deep(root->left); int right_deep = tree_deep(root->right); return (left_deep > right_deep ? left_deep : right_deep) + 1; } void tree_free(tree_node *root) { if(root == NULL) return; tree_free(root->left); tree_free(root->right); free(root); } int main() { tree_node *root = NULL; root = create_tree_node(1); printf("%d\n",tree_deep(root)); tree_free(root); return 0; } 练习2: #include #include #include typedef struct linknode { int data; struct linknode *next; }linknode_t; linknode_t *create_linknode_t() { linknode_t *head = NULL; head = (linknode_t *)malloc(sizeof(linknode_t)); memset(head,0,sizeof(linknode_t)); head->next = NULL; return head; } void input_linknode(linknode_t *head,int data) { linknode_t *new = NULL; new = (linknode_t *)malloc(sizeof(linknode_t)); new->data = data; new->next = NULL; linknode_t *p = head; while(p->next != NULL){ p = p->next; } p->next = new; } void sort_linklist(linknode_t *head) { if(head == NULL || head->next == NULL) return ; for(linknode_t *p = head->next; p != NULL; p = p->next){ for(linknode_t *q = p->next; q != NULL; q = q->next){ if(p->data >q->data){ p->data ^= q->data; q->data ^= p->data; p->data ^= q->data; } } } } void output(linknode_t *head) { linknode_t *p = head->next; while(p){ printf("%d ",p->data); p = p->next; } printf("\n"); } int main() { linknode_t *head = NULL; head = create_linknode_t(); printf("请输入5个数字:\n"); int a; for(int i = 0; i < 5; i++){ scanf("%d",&a); input_linknode(head,a); } printf("排序前:"); output(head); sort_linklist(head); printf("排序后:"); output(head); free(head); head = NULL; return 0; } 练习3 #include #include // 单向链表节点结构体(和你之前的代码完全一致) typedef struct linknode { int data; struct linknode *next; } linknode_t; // head1: 1 3 5 7 9 // head2: 2 4 6 8 10 // 合并后: 1 2 3 4 5 6 7 8 9 10 linknode_t *and_linklist(linknode_t *head1, linknode_t *head2) { // 1. 边界处理:如果其中一个链表为空,直接返回另一个 if (head1 == NULL) return head2; if (head2 == NULL) return head1; // 2. 创建虚拟头节点(dummy head),简化头节点处理 linknode_t dummy; linknode_t *p = &dummy; // p 用来遍历,构建新链表 // 3. 双指针遍历两个链表,按大小拼接 while (head1 != NULL && head2 != NULL) { if (head1->data data) { p->next = head1; // 把小的节点挂到新链表 head1 = head1->next; // head1 后移 } else { p->next = head2; // 把小的节点挂到新链表 head2 = head2->next; // head2 后移 } p = p->next; // 新链表指针后移 } // 4. 把剩余未遍历完的链表直接挂到末尾 if (head1 != NULL) p->next = head1; if (head2 != NULL) p->next = head2; // 5. 返回虚拟头节点的下一个节点,就是合并后的链表头 return dummy.next; } // 创建链表(尾插法) linknode_t *create_linklist(int arr[], int len) { if (len == 0) return NULL; linknode_t *head = NULL, *tail = NULL, *new = NULL; for (int i = 0; i < len; i++) { new = (linknode_t *)malloc(sizeof(linknode_t)); new->data = arr[i]; new->next = NULL; if (head == NULL) head = tail = new; else { tail->next = new; tail = new; } } return head; } // 打印链表 void print_linklist(linknode_t *head) { linknode_t *p = head; while (p != NULL) { printf("%d ", p->data); p = p->next; } printf("\n"); } // 释放链表 void free_linklist(linknode_t *head) { linknode_t *tmp = NULL; while (head != NULL) { tmp = head; head = head->next; free(tmp); } } // 主函数测试 int main() { int arr1[] = {1, 3, 5, 7, 9}; int arr2[] = {2, 4, 6, 8, 10}; int len1 = sizeof(arr1) / sizeof(arr1[0]); int len2 = sizeof(arr2) / sizeof(arr2[0]); linknode_t *head1 = create_linklist(arr1, len1); linknode_t *head2 = create_linklist(arr2, len2); printf("链表1:"); print_linklist(head1); printf("链表2:"); print_linklist(head2); linknode_t *new_head = and_linklist(head1, head2); printf("合并后:"); print_linklist(new_head); free_linklist(new_head); return 0; } 练习4:【图片】
+10