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

作业社区

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

0 提交作业
0 布置作业
0 满分作业
得分 100
讨论题

cjozGV 的学生作业:

#include "stdio.h" #include "stdlib.h" #include "string.h" typedef int datatype_a; //定义数据类型 typedef struct linknode{ datatype_a 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_a data){ //1创建新节点 linknode_t *new_dode = NULL; new_dode = (linknode_t *)malloc(sizeof(linknode_t)); if (NULL == new_dode){ printf("malloc is fail!\n"); return; } new_dode->data = data; //存储数据 //2.找到插入位置 linknode_t *p = head; //从头节点开始遍历 while (p->next != NULL && p->next->data > data){ p = p->next; //继续往后找 } //3.插入新的节点 new_dode->next = p->next; //新节点指向p的下一个节点 p->next = new_dode; //p指向新节点 } //3.打印链表中的数据 void printf_data_linklist(linknode_t *heda){ linknode_t *p = heda->next; //跳过头节点(头节点不存储数据) printf("linked list (Descending) Order "); while (p != NULL){ printf("%d ",p->data); //打印当前数据 p=p->next; //移到下一个节点 } printf("\n"); } //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_a data[] = {1,5,3,7,9}; 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.释放链表内存 free_linklist(head); return 0; }

得分 100
讨论题

慕尼黑0001808 的学生作业:

/* 练习 struct student { int id; short score; char name[5]; }; //计算出上述类型的大小,并打印输出 */ #include #define MAX_ALIGNMENT 4 size_t offset = 0; /** * @brief 添加结构体成员并计算对齐后的偏移量 * * @param size 当前成员的大小(单位:字节) * @param alignment 当前成员的对齐要求(例如:int 为 4,short 为 2) * * 功能说明: * 1. 根据成员的对齐要求计算填充字节(padding)。 * 2. 更新全局偏移量 offset = 原偏移 + 填充字节 + 成员大小。 * 3. 打印填充和成员占用的字节数(调试用)。 */ void add_member(size_t size, size_t alignment) { // 计算需要的填充字节数: // 如果当前偏移量(offset)不是 alignment 的倍数, // 则需要补齐到最近的 alignment 的倍数。 // 例如:offset=5, alignment=4 → padding=3 (因为 5+3=8 是4的倍数) size_t padding = 0; if (offset % alignment != 0) { padding = alignment - (offset % alignment); } // 更新全局偏移量: // 新偏移量 = 原偏移 + 填充字节 + 成员大小 offset += padding + size; printf("+%zu (padding) +%zu (member) → offset = %zu\n", padding, size, offset); } size_t finalize_struct_size() { if (offset % MAX_ALIGNMENT != 0) { size_t padding = MAX_ALIGNMENT - (offset % MAX_ALIGNMENT); offset += padding; printf("+%zu (final padding) → total size = %zu\n", padding, offset); } return offset; } int main() { offset = 0; printf("Calculating size of struct student:\n"); add_member(4, 4); // int id add_member(2, 2); // short score add_member(5, 1); // char name[5] size_t total_size = finalize_struct_size(); printf("Final struct size: %zu bytes\n", total_size); return 0; }

微信客服

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

帮助反馈 APP下载

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

公众号

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