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

作业社区

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

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

RX0_UNICORN 的学生作业:

// linklist.h #ifndef __LINKLIST_H__ #define __LINKLIST_H__ #include #include #include typedef int datatype_t; typedef struct node { datatype_t data; // 数据域 保存有效的数据 struct node *next; // 指针域 保存下一个结点地址 }linklist_t; extern linklist_t *create_empty_linklist(); extern void insert_head_linklist(linklist_t *head, datatype_t data); extern void insert_tail_linklist(linklist_t *head, datatype_t data); extern void insert_order_linklist(linklist_t *head, datatype_t data); extern void print_data_linklist(linklist_t *head); #endif // linlist.c #include "linklist.h" // 创建一个新的链表---为头结点分配堆区空间 linklist_t *create_empty_linklist() { // 为头结点分配堆区空间 linklist_t *head = NULL; head = (linklist_t *)malloc(sizeof(linklist_t)); if(NULL == head) { printf("malloc is fail!\n"); return NULL; } memset(head, 0, sizeof(linklist_t)); head->next = NULL; // 该步骤可省略 return head; } // 头插法,每次都在头结点后插入数据 // [特点:插入顺序和输出顺序是相反的] void insert_head_linklist(linklist_t *head, datatype_t data) { // 分配空间 linklist_t *temp = NULL; temp = (linklist_t *)malloc(sizeof(linklist_t)); // 将 data 存入 temp 的数据域 temp->data = data; // 将 temp 插入 head 后面 temp->next = head->next; head->next = temp; return; } // 尾插法 void insert_tail_linklist(linklist_t *head, datatype_t data) { // 分配空间 linklist_t *temp = NULL; temp = (linklist_t *)malloc(sizeof(linklist_t)); // 将 data 存入 temp 的数据域 temp->data = data; linklist_t *p = head; // 遍历循环找到尾结点 while(p->next != NULL) { p = p->next; } // 将 temp 插入 p 后面 temp->next = p->next; p->next = temp; return; } // 有序法 void insert_order_linklist(linklist_t *head, datatype_t data) { linklist_t *temp = NULL; temp = (linklist_t *)malloc(sizeof(linklist_t)); temp->data = data; linklist_t *p = head; while(p->next != NULL && data < p->next->data) { p = p->next; } temp->next = p->next; p->next = temp; return; } // 输出链表中的数据 void print_data_linklist(linklist_t *head) { linklist_t *p = head; while(p->next != NULL) // next 为 NULL 时停止打印 { printf("%d ", p->next->data); p = p->next; } printf("\n"); return; } // main.c #include "linklist.h" int main(int argc, const char *argv[]) { datatype_t data = 0; int data_num = 0, i = 0; linklist_t *head = create_empty_linklist(); printf("please input you want save data num : "); scanf("%d", &data_num); printf("please input %d data : ", data_num); for(i = 0; i < data_num; i++) { scanf("%d", &data); // insert_head_linklist(head, data); // insert_tail_linklist(head, data); insert_order_linklist(head, data); } print_data_linklist(head); return 0; } 【图片】

得分 100
讨论题
得分 100
学习任务

RX0_UNICORN 的学生作业:

// seqlist.h #ifndef __SEQLIST_H__ #define __SEQLIST_H__ #include #include #include #define MAX 10 struct student { char name[20]; int id; int age; }; typedef struct student datatype_t; typedef struct { datatype_t buf[MAX]; int n; }seqlist_t; seqlist_t *create_empty_seqlist(); int is_full_seqlist(seqlist_t *l); void insert_data_seqlist(seqlist_t *l, datatype_t data); void print_data_seqlist(seqlist_t *l); #endif // seqlist.c #include "seqlist.h" seqlist_t *create_empty_seqlist() { seqlist_t *l = (seqlist_t *)malloc(sizeof(seqlist_t)); if(NULL == l) { printf("malloc is fail!"); return NULL; } memset(l, 0, sizeof(seqlist_t)); l -> n = 0; return l; } int is_full_seqlist(seqlist_t *l) { return l->n < MAX ? 1 : 0; } void insert_data_seqlist(seqlist_t *l, datatype_t data) { l->buf[l->n] = data; l->n++; } void print_data_seqlist(seqlist_t *l) { printf("NAME\tID\tAGE\n"); printf("---------------------------------\n"); for(int i = 0; i < l->n; i++) { printf("%s\t%d\t%d\n", l->buf[i].name, l->buf[i].id, l->buf[i].age); printf("---------------------------------\n"); } } // main.c #include "seqlist.h" int main(int argc, const char *argv[]) { seqlist_t *l = create_empty_seqlist(); while(is_full_seqlist(l)) { printf("Please input no more than %d student info[NAME ID AGE] : ", MAX - l->n); datatype_t std; scanf("%s%d%d", std.name, &(std.id), &(std.age)); insert_data_seqlist(l, std); } print_data_seqlist(l); free(l); l = NULL; return 0; } 【图片】

得分 100
讨论题

cjozGV 的学生作业:

#include "stdio.h" #include "stdlib.h" #include "string.h" typedef int datatype_t; //定义链表节点结构 typedef struct Node{ datatype_t value; //节点的值,代表入的编号 struct Node* next; } Node; //创建包含n个节点的循环链表 Node* create_Circular_LinkedList(int n) { Node* head = NULL; // 链表头指针 Node* prev = NULL; // 用于跟踪前一个节点 for (int i = 1; i value = i; // 设置节点值 newNode->next = NULL; if (head == NULL) { head = newNode; // 第一个节点作为头节点 } else { prev->next = newNode; // 将前一个节点的next指向新节点 } prev = newNode; // 更新前一个节点为当前新节点 } if (prev != NULL) { prev->next = head; // 将最后一个节点的next指向头节点,形成循环 } return head; // 返回头节点 } void josephus(int n, int k, int m) { Node* head = create_Circular_LinkedList(n); // 创建循环链表 Node* current = head; // 当前节点指针 Node* prev = NULL; // 当前节点的前一个节点指针 // 移动到起始点:第k个节点 for (int i = 1; i < k; i++) { prev = current; current = current->next; } printf("出列顺序: "); // 当链表中不止一个节点时循环 while (current->next != current) { // 计数m-1次,找到要删除节点的前一个节点 for (int i = 1; i < m; i++) { prev = current; current = current->next; } // 输出当前要删除的节点值 printf("%d ", current->value); // 删除当前节点:将前一个节点的next指向当前节点的下一个节点 prev->next = current->next; // 保存当前节点以便释放内存 Node* temp = current; // 移动到下一个节点 current = current->next; // 释放当前节点的内存 free(temp); } // 输出最后一个节点 printf("%d\n", current->value); // 释放最后一个节点的内存 free(current); } int main() { int n = 8; // 总人数 int k = 3; // 起始位置 int m = 4; // 计数到m的人出列 josephus(n, k, m); // 调用约瑟夫函数 return 0; }

得分 100
学习任务

cjozGV 的学生作业:

#include "stdio.h" #include "stdlib.h" #include "string.h" typedef int datatype_t; //定义链表节点结构 typedef struct Node{ datatype_t value; //节点的值,代表入的编号 struct Node* next; } Node; //创建包含n个节点的循环链表 Node* create_Circular_LinkedList(int n) { Node* head = NULL; // 链表头指针 Node* prev = NULL; // 用于跟踪前一个节点 for (int i = 1; i value = i; // 设置节点值 newNode->next = NULL; if (head == NULL) { head = newNode; // 第一个节点作为头节点 } else { prev->next = newNode; // 将前一个节点的next指向新节点 } prev = newNode; // 更新前一个节点为当前新节点 } if (prev != NULL) { prev->next = head; // 将最后一个节点的next指向头节点,形成循环 } return head; // 返回头节点 } void josephus(int n, int k, int m) { Node* head = create_Circular_LinkedList(n); // 创建循环链表 Node* current = head; // 当前节点指针 Node* prev = NULL; // 当前节点的前一个节点指针 // 移动到起始点:第k个节点 for (int i = 1; i < k; i++) { prev = current; current = current->next; } printf("出列顺序: "); // 当链表中不止一个节点时循环 while (current->next != current) { // 计数m-1次,找到要删除节点的前一个节点 for (int i = 1; i < m; i++) { prev = current; current = current->next; } // 输出当前要删除的节点值 printf("%d ", current->value); // 删除当前节点:将前一个节点的next指向当前节点的下一个节点 prev->next = current->next; // 保存当前节点以便释放内存 Node* temp = current; // 移动到下一个节点 current = current->next; // 释放当前节点的内存 free(temp); } // 输出最后一个节点 printf("%d\n", current->value); // 释放最后一个节点的内存 free(current); } int main() { int n = 8; // 总人数 int k = 3; // 起始位置 int m = 4; // 计数到m的人出列 josephus(n, k, m); // 调用约瑟夫函数 return 0; }

微信客服

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

帮助反馈 APP下载

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

公众号

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