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

作业社区

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

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

慕九州9493288 的学生作业:

一、代码 looplist.h #ifndef __looplist_H__ #define __looplist_H__ #include #include #include typedef int datatype_t; typedef struct node { datatype_t data;//数据域保存有效数据 struct node *next;//指针域保存下一个结点的地址 }loopnode_t; // 创建一个包含n个节点的不带头结点的循环链表 extern loopnode_t *create_looplist(int n); // 解决约瑟夫环问题 extern void josephus_problem(loopnode_t* head, int k, int m); // 打印循环链表中的所有数据 extern void print_looplist(loopnode_t *head); #endif looplist.c #include "looplist.h" /* 创建一个包含n个节点的不带头结点的循环链表 */ loopnode_t *create_looplist(int n) { if(n < 1) return NULL; loopnode_t *head = NULL, *p = NULL; for(int i = 1;i data = i; if(head == NULL) { head = node; head->next = head; p = head;//结点下个就是指向自己 } else { node->next = p->next;//原结点next给新结点next p->next = node;//原结点指向新结点 p = node;// p指向下一个结点 } } return head; } /* 打印循环链表中的所有数据 */ void print_looplist(loopnode_t *head) { loopnode_t *p = head; do { printf("%d ",p->data); p = p->next; } while(p != head); printf("\n"); } /* 约瑟夫环问题解决函数 */ void josephus_problem(loopnode_t* head, int k, int m) { if(head == NULL || k < 1 || m < 1) { printf("Invalid input!\n"); } loopnode_t *p = head; loopnode_t *q = NULL; // 定位到第k个节点 for(int i = 1;i < k;i++) { q = p; p = p->next; } printf("Initial looplist: "); print_looplist(head); while(p->next != p) // 当链表中不止一个节点时循环 { for(int i = 1;i < m;i++) { q = p; p = p->next; } // 跳过当前节点 q->next = p->next; printf("Eliminated data: %d\n", p->data); free(p); p = q->next; } // 输出最后一个剩余节点 printf("Last data: %d\n",p->data); free(q); } main.c #include "looplist.h" int main(int argc, const char *argv[]) { int n = 8,k = 3, m = 4; // 创建循环链表 loopnode_t *head = create_looplist(n); // 解决约瑟夫环问题 josephus_problem(head,k,m); return 0; } 二、结果 【图片】

得分 100
学习任务

慕九州9493288 的学生作业:

一、代码 linklist.h #ifndef __LINKLIST_H__ #define __LINKLIST_H__ #include #include #include typedef int datatype_t; typedef struct node { datatype_t data; struct node* next; }node_linklist_t; extern node_linklist_t* create_linklist(); extern int is_empty_linklist(node_linklist_t* head); extern void insert_linklist(node_linklist_t* head,datatype_t data); extern int reverse_linklist(node_linklist_t* head); extern int print_linklist(node_linklist_t* head); extern void free_linklist(node_linklist_t* head); #endif linklist.c #include "linklist.h" node_linklist_t* create_linklist() { node_linklist_t* head = malloc(sizeof(node_linklist_t)); if(head == NULL) { printf("malloc is fail!\n"); return NULL; } memset(head,0,sizeof(node_linklist_t)); return head; } int is_empty_linklist(node_linklist_t* head) { return head->next == NULL; } void insert_linklist(node_linklist_t* head,datatype_t data) { node_linklist_t* temp = malloc(sizeof(node_linklist_t)); node_linklist_t* p = head; if(temp == NULL) { printf("malloc is fail!\n"); return; } while(p->next != NULL && data > p->next->data) { p = p->next; } temp->data = data; temp->next = p->next; p->next = temp; return; } //链表逆序 int reverse_linklist(node_linklist_t* head) { if(is_empty_linklist(head)) { return -1; } node_linklist_t* p = head->next->next; head->next->next = NULL; while(p != NULL) { node_linklist_t* q = p->next; p->next = head->next; head->next = p; p = q; } } int print_linklist(node_linklist_t* head) { node_linklist_t* p = head; while(p->next != NULL) { printf("%d ",p->next->data); p = p->next; } printf("\n"); } //释放链表内存 void free_linklist(node_linklist_t* head) { printf("next data is:\n"); node_linklist_t* p = head; while(p != NULL) { node_linklist_t* q = p; p = p->next; print_linklist(q); free(q); // // node_linklist_t* q = p->next; // print_linklist(p); // free(p); // p = q; } } main.c #include "linklist.h" int main(int argc, const char *argv[]) { datatype_t data = 0; int n = 0; node_linklist_t* head = create_linklist(); if(head != NULL) { printf("Please input the data number you want to reverse: "); scanf("%d",&n); printf("Please insert %d data: ",n); for(int i = 0;i < n;i++) { scanf("%d",&data); insert_linklist(head,data); } print_linklist(head); printf("Are you want to reverse? Yes: 1 or No: 0 , you chose: "); scanf("%d",&n); if(n) { int ret = reverse_linklist(head); if(ret < 0) { printf("The data is empty!\n"); } print_linklist(head); } free_linklist(head); head = NULL; } return 0; } 二、结果 【图片】

得分 100
讨论题

慕九州9493288 的学生作业:

一、代码 linklist.h #ifndef __LINKLIST_H__ #define __LINKLIST_H__ #include #include #include // 定义链表中存储的数据类型 typedef int typedata_t; // 定义链表节点结构体 typedef struct linklist_node { typedata_t data; struct linklist_node* next; }node_linklist_t; // 声明创建空链表的函数 extern node_linklist_t* create_empty_linklist(); //有序插入节点 extern void insert_order_linklist(node_linklist_t* head, typedata_t data); //打印链表 extern void print_linklist(node_linklist_t* head); //删除链表数据 extern int delete_linklist(node_linklist_t* head,typedata_t data); //判断链表是否为空 extern int is_empty_linklist(node_linklist_t* head); // 内存清理 extern void free_linklist(node_linklist_t* head); #endif linklist.c #include "linklist.h" //创建空链表头节点 node_linklist_t* create_empty_linklist() { // 分配头节点内存 node_linklist_t* head = malloc(sizeof(node_linklist_t)); if(NULL == head) { printf("malloc is fail!\n"); return NULL; } // 初始化头节点(数据域为0,指针域为NULL) memset(head,0,sizeof(node_linklist_t)); return head; } //有序插入节点(降序排列) void insert_order_linklist(node_linklist_t* head, typedata_t data) { // 创建新节点 node_linklist_t* temp = malloc(sizeof(node_linklist_t)); if(NULL == temp) { printf("malloc is fail!\n"); return; } // 设置新节点数据 temp->data = data; // 查找插入位置 node_linklist_t* p = head; while(p->next != NULL && data < p->next->data) { p = p->next; } // 插入新节点 temp->next = p->next; p->next = temp; } //打印链表所有节点数据 void print_linklist(node_linklist_t* head) { node_linklist_t* p = head; while(p->next != NULL) { printf("%d ",p->next->data); p = p->next; } printf("\n"); } //删除链表数据 int delete_linklist(node_linklist_t* head,typedata_t data) { node_linklist_t* p = head; int flag = 0; if(is_empty_linklist(p)) { return -1; } while(p->next != NULL) { if(data == p->next->data) { flag = 1; node_linklist_t* q = p->next; p->next = q->next; free(q); q = NULL; } else { p = p->next; } } if(!flag) { return -2; }else { printf("delete %d data is successful!\n",data); return 0; } } //判断链表是否为空 int is_empty_linklist(node_linklist_t* head) { return head->next == NULL; } //释放整个链表内存 void free_linklist(node_linklist_t* head) { node_linklist_t* p = head; while(p != NULL) { node_linklist_t *temp = p;// 保存当前节点 p = p->next;// 移动至下一节点 free(temp);// 释放当前节点 } } main.c #include "linklist.h" int main(int argc, const char *argv[]) { int n = 0; typedata_t data = 0; node_linklist_t* head = create_empty_linklist(); if(head != NULL) { printf("Please input the number of data you want to insert: "); scanf("%d",&n); printf("Please input %d data :",n); for(int i = 0; i < n;i++) { scanf("%d",&data); insert_order_linklist(head,data); } // 打印链表 print_linklist(head); printf("Please input the data you want to delete: "); scanf("%d",&data); int ret = delete_linklist(head,data); if(ret < 0) { printf("delete data is not exist or is empty!\n"); return -1; } print_linklist(head); } // 内存清理 free_linklist(head); head = NULL; return 0; } 二、结果 【图片】

微信客服

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

帮助反馈 APP下载

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

公众号

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