为了账号安全,请及时绑定邮箱和手机立即绑定

作业社区

探索学习新天地,共享知识资源!

0 提交作业
0 布置作业
0 满分作业
得分 100
学习任务

cjozGV 的学生作业:

#include "stdio.h" #include "stdlib.h" #include "string.h" typedef int datatype_t; typedef struct linknode{ datatype_t data; //数据域 struct linknode *next; //节点域 } linknode_t; //1.创建一个新链表,为头节点在栈区创建空间 linknode_t *create_list(int arr[],int n){ linknode_t *head = (linknode_t *)malloc(sizeof(linknode_t)); head->next = NULL; //初始时链表为空 linknode_t *tail = head; //尾指针初始指向头节点 //2.遍历数组,逐个插入节点 for (int i = 0; i < n; ++i) { //2.1创建新节点 linknode_t *new_node = (linknode_t *)malloc(sizeof(linknode_t)); new_node->data = arr[i]; //存储数据 new_node->next = NULL; //新节点的next暂时为NUll //2.2将新节点链接到链表末尾 tail->next = new_node; //尾节点的next指向新节点 tail = new_node; //更新尾指针 } return head; } // 打印链表 void print_list(linknode_t *head){ linknode_t *p = head->next; //跳过头节点 while (p != NULL){ printf("%d ",p->data); p = p->next; } printf("\n"); } // 逆序链表(反转链表) void reverse_list(linknode_t *head){ if (head == NULL || head->next == NULL || head->next->next == NULL){ return; //空链表或只有一个节点,无需反转 } linknode_t *prev = NULL; linknode_t *curr = head->next; //从第一个实际节点开始 linknode_t *next = NULL; while (curr != NULL){ next = curr->next; //保存下一个节点 curr->next = prev; //反转指针 prev = curr; //prev前移 curr = next; //curr前移 } head->next = prev; //更新头节点的next指向新的第一个节点 } void clear_list(linknode_t *head) { linknode_t *p = head; while (p != NULL) { linknode_t *temp = p; p = p->next; free(temp); // 释放当前节点 } } int main() { int arr[] = {1, 5, 3, 7, 9}; int n = sizeof(arr) / sizeof(arr[0]); // 1. 创建链表并插入数据 linknode_t *head = create_list(arr, n); printf("原始链表: "); print_list(head); // 2. 逆序链表 reverse_list(head); printf("逆序后链表: "); print_list(head); // 3. 清除链表 clear_list(head); head = NULL; // 防止野指针 return 0; }

得分 100
学习任务

浪潮君 的学生作业:

#include #include // 定义二叉树节点结构 typedef struct TreeNode { char data; struct TreeNode *left; struct TreeNode *right; } TreeNode; // 定义队列节点结构 typedef struct QueueNode { TreeNode *treeNode; struct QueueNode *next; } QueueNode; // 定义链式队列结构 typedef struct LinkQueue { QueueNode *front; QueueNode *rear; } LinkQueue; // 创建新的树节点 TreeNode* createTreeNode(char data) { TreeNode *node = (TreeNode*)malloc(sizeof(TreeNode)); node->data = data; node->left = NULL; node->right = NULL; return node; } // 创建空的链式队列 LinkQueue* createEmptyLinkQueue() { LinkQueue *q = (LinkQueue*)malloc(sizeof(LinkQueue)); q->front = NULL; q->rear = NULL; return q; } // 判断队列是否为空 int isEmptyLinkQueue(LinkQueue *q) { return q->front == NULL; } // 入队操作 void enterLinkQueue(LinkQueue *q, TreeNode *node) { QueueNode *newNode = (QueueNode*)malloc(sizeof(QueueNode)); newNode->treeNode = node; newNode->next = NULL; if (isEmptyLinkQueue(q)) { q->front = newNode; q->rear = newNode; } else { q->rear->next = newNode; q->rear = newNode; } } // 出队操作 TreeNode* deleteLinkQueue(LinkQueue *q) { if (isEmptyLinkQueue(q)) { return NULL; } QueueNode *temp = q->front; TreeNode *node = temp->treeNode; q->front = q->front->next; if (q->front == NULL) { q->rear = NULL; } free(temp); return node; } // 层次遍历函数 void levelOrderTraversal(TreeNode *root) { if (root == NULL) return; LinkQueue *q = createEmptyLinkQueue(); enterLinkQueue(q, root); while (!isEmptyLinkQueue(q)) { TreeNode *temp = deleteLinkQueue(q); printf("%c ", temp->data); if (temp->left != NULL) { enterLinkQueue(q, temp->left); } if (temp->right != NULL) { enterLinkQueue(q, temp->right); } } free(q); } // 主函数,构建二叉树并调用层次遍历 int main() { // 构建二叉树 TreeNode *root = createTreeNode('A'); root->left = createTreeNode('B'); root->right = createTreeNode('C'); root->left->left = createTreeNode('D'); root->left->right = createTreeNode('E'); root->right->right = createTreeNode('F'); // 调用层次遍历函数 levelOrderTraversal(root); printf("\n"); return 0; } 运行结果:A B C D E F

得分 100
讨论题

cjozGV 的学生作业:

#include "stdio.h" #include "stdlib.h" #include "string.h" typedef int datatype_t; typedef struct linknode{ datatype_t data; //数据域 struct linknode *next; //节点域 }linknode_t; //1.创建一个新链表,为头节点在栈区创建空间 linknode_t *create_empty_linklist(){ //1.为头节点在堆区分配空间,用指针head保存 linknode_t *head = NULL; head = (linknode_t*)malloc(sizeof(linknode_t)); //2.头节点的指针域为NULL if (NULL == head){ printf("malloc is fail!\n"); return NULL; } memset(head,0, sizeof(linknode_t)); return head; } //2.按从小到大的顺序插入数据 void insert_order_linklist(linknode_t *head,datatype_t data){ //1.创建新节点 linknode_t *new_node = NULL; new_node = (linknode_t*)malloc(sizeof(linknode_t)); new_node->data = data; //1.设置新节点的数据 //2.找到插入的位置 linknode_t *p = head; //从链表的头开始 while (p->next != NULL && p->next->data > data){ p = p->next; //向后移动指针,直到找到合适的插入位置 } //3.插入新节点 new_node->next = p->next; //新节点指向p的下一个节点 p->next = new_node; //p指向新节点 } // 打印链表中的数据(从大到小) void printf_data_linklist(linknode_t *head) { linknode_t *p = head->next; // 跳过头节点 printf("Linked List: "); while (p != NULL) { printf("%d ", p->data); p = p->next; } printf("\n"); } //删除链表中所有值为target的节点 void delete_all_target_nodes(linknode_t *head,datatype_t target){ linknode_t *p = head; //p指向当前节点的前一个节点 while (p->next != NULL){ if (p->next->data == target){ // 找到目标点删除它 linknode_t *temp = p->next; //暂存目标节点 p->next = temp->next; //前驱节点跳过目标节点 free(temp); } else { p = p->next; //继续遍历 } } } //4.释放链表占用的内存 void free_linklist(linknode_t *head) { linknode_t *p = head; // 从头节点开始释放 while (p != NULL) { linknode_t *temp = p; // 暂存当前节点 p = p->next; // 移动到下一个节点 free(temp); // 释放当前节点 } } int main(){ //1.创建空链表 linknode_t *head = create_empty_linklist(); //2.准备要插入的数据 datatype_t data[] = {1, 5, 3, 7, 9, 5, 8, 5, 3}; int n = sizeof(data) / sizeof(data[0]); //3.有序插入数据 for (int i = 0; i < n; i++) { insert_order_linklist(head,data[i]); } //4.打印链表 printf_data_linklist(head); //5.删除所有值为3的节点 delete_all_target_nodes(head,3); //6.再次打印 printf_data_linklist(head); //7.释放链表内存 free_linklist(head); return 0; }

得分 100
学习任务

RX0_UNICORN 的学生作业:

#include #include #include #define MAX 10 struct student { char name[20]; int id; int score; int age; }; typedef struct student datatype_t; typedef struct { datatype_t stu[MAX]; // 定义数组记录班级学⽣每个学⽣的信息 int n; // 学⽣实际到来的个数 }seqlist_t; seqlist_t *get_seqlist_t_addr() { seqlist_t *s_t = NULL; int s_t_size = (sizeof(char) * 20 + sizeof(int) * 3) * MAX + sizeof(int); s_t = (seqlist_t *)malloc(s_t_size); if(NULL == s_t) { printf("malloc is fail!\n"); return NULL; } memset(s_t, 0, s_t_size); return s_t; } void input_attendance_stu(seqlist_t *stp) { printf("please input attendance student data : "); scanf("%d", &(stp -> n)); } void input_student_data(seqlist_t *stp) { for(int i = 0; i < (stp -> n); i++) { printf("please input student data[NAME ID SCORE AGE] : "); scanf("%s%d%d%d", (*stp).stu[i].name, &((*stp).stu[i].id), &((*stp).stu[i].score), &((*stp).stu[i].age)); } } void output_student_data(seqlist_t *stp) { printf("NAME\tID\tSCORE\tAGE\n"); printf("--------------------------------------\n"); for(int i = 0; i < (stp -> n); i++) { printf("%s\t%d\t%d\t%d\n", (*stp).stu[i].name, (*stp).stu[i].id,(*stp).stu[i].score, (*stp).stu[i].age); printf("--------------------------------------\n"); } } int query_student_id(seqlist_t *s_t, const int id) { datatype_t st_id; for(int i = 0; i < (s_t -> n); i++) { if(id == (*s_t).stu[i].id) { st_id = (*s_t).stu[i]; } } if(id != st_id.id) { return 1; } printf("NAME\tID\tSCORE\tAGE\n"); printf("%s\t%d\t%d\t%d\n", st_id.name, st_id.id, st_id.score, st_id.age); return 0; } int main(int argc, const char *argv[]) { int query_id; // 表初始化 seqlist_t *s_t = get_seqlist_t_addr(); if(NULL == s_t) { printf("malloc is fail!\n"); return 1; } // 保存实到人数信息 input_attendance_stu(s_t); if(MAX < (s_t -> n)) { printf("Exceed the maximum limit : %d\n", MAX); free(s_t); s_t = NULL; return 1; } // 保存学生信息 input_student_data(s_t); printf("=====================================\n"); // 输出保存的学生信息 output_student_data(s_t); printf("=====================================\n"); // 根据用户输入的学生 ID 查询学生信息并打印 printf("please input query student ID : "); scanf("%d", &query_id); int ret = query_student_id(s_t, query_id); if(ret == 1) { printf("error : no student data\n"); free(s_t); s_t = NULL; return 1; } seqlist_t st = *s_t; printf("班级第一个学生 id的值 : \n"); printf("NAME\tID\tSCORE\tAGE\n"); printf("%s\t%d\t%d\t%d\n", st.stu[0].name, st.stu[0].id, st.stu[0].score, st.stu[0].age); free(s_t); s_t = NULL; return 0; } 【图片】

微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号