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

作业社区

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

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

别摸我的键盘 的学生作业:

#include #include #include typedef int datatype_t; typedef struct node { datatype_t data; struct node *next; int size; } looplist; /** * 初始化头节点 * @return */ looplist *init_head_looplist() { looplist *head = (looplist *) malloc(sizeof(looplist)); memset(head, 0, sizeof(looplist)); head->next = head; head->size = 0; return head; } /** * 头插法 * @param head * @param data */ void insert_head_looplist(looplist *head, datatype_t data) { looplist *temp_node = (looplist *) malloc(sizeof(looplist)); temp_node->data = data; temp_node->next = head->next; head->next = temp_node; head->size = head->size + 1; } /** * 循环链表打印输出 * @param head */ void print_looplist(looplist *head) { if (NULL == head) { return; } looplist *p = NULL; p = head; while (p->next != head) { p = p->next; printf("%d ", p->data); } printf("\n"); } /** * 删除元素 * @param head * @param data * @return */ int delete_element(looplist *head, datatype_t data) { looplist *p = head; looplist *q = NULL; int flag = 0; while (p->next != head) { if (p->next->data == data) { q = p->next; p->next = q->next; free(q); q = NULL; flag = 1; } else { p = p->next; } } if (flag == 0) { return -1; } else { return 1; } } /** * 移除头节点 * @param head */ void remove_head(looplist *head) { looplist *p = head; while (p->next != head) { p = p->next; } p->next = head->next; } /** * 约瑟夫问题解决 * @param head * @param start * @param cnt */ void josephu(looplist *head, int start, int cnt) { looplist *p = head; p->size = head->size; int acc = start; while (p->next != head && acc > 0) { p = p->next; acc--; } remove_head(head); while (head->size > 0) { int tmp_cnt = 1; while (tmp_cnt != (cnt - 1)) { tmp_cnt++; p = p->next; } printf("%d ", p->next->data); int ret = delete_element(p, p->next->data); if (ret > 0) { head->size--; } else { printf("\njosephu success"); return; } p = p->next; } } int main(int argc, const char *argv[]) { setbuf(stdout, NULL); looplist *head = init_head_looplist(); int cnt = 0; int num = 0; printf("please input number count: "); scanf("%d", &cnt); for (int i = 0; i < cnt; i++) { scanf("%d", &num); insert_head_looplist(head, num); } print_looplist(head); josephu(head, 3, 4); return 0; } 代码执行 please input number count:8 8 7 6 5 4 3 2 1 1 2 3 4 5 6 7 8 6 2 7 4 3 5 1 8 josephu success

得分 100
学习任务

别摸我的键盘 的学生作业:

linklist.h #ifndef __LINKLIST_H__ #define __LINKLIST_H__ #include #include #include typedef int datatype_t; typedef struct node{ datatype_t data; struct node * next; }linknode_t; extern linknode_t *create_empty_linklist(); extern void insert_head_linklist(linknode_t *head,datatype_t data); extern void printf_data_linklist(linknode_t *head); extern void insert_tail_linklist(linknode_t *head,datatype_t data); extern void insert_order_linklist(linknode_t *head,datatype_t data); extern int is_empty_linklist(linknode_t *head); extern int delete_data_linklist(linknode_t *head,datatype_t data); extern void reverse_data_linklist(linknode_t *head); extern void clean_up_linklist(linknode_t *head); #endif linklist.c #include "linklist.h" /* *初始化链表节点 */ linknode_t *create_empty_linklist(){ linknode_t * l = (linknode_t *)malloc(sizeof(linknode_t)); if(NULL == l){ printf("linknode init fail!\n"); return NULL; } memset(l, 0, sizeof(linknode_t)); return l; } void insert_head_linklist(linknode_t *head, datatype_t data){ if(NULL == head){ printf("linklist head insert param exception"); } //申请新节点内存 linknode_t * temp_p = (linknode_t *)malloc(sizeof(linknode_t)); //数据域赋值 temp_p -> data = data; //插入新节点 temp_p -> next = head -> next; head -> next = temp_p; } void insert_tail_linklist(linknode_t *head, datatype_t data){ if(NULL == head){ printf("linklist tail insert param exception"); } //申请新节点内存 linknode_t * temp_p = (linknode_t *)malloc(sizeof(linknode_t)); //数据域赋值 temp_p -> data = data; linknode_t * p = head; while(p -> next != NULL){ p = p -> next; } //插入新节点 temp_p -> next = p -> next; p -> next = temp_p; } void insert_order_linklist(linknode_t *head, datatype_t data){ if(NULL == head){ printf("linklist order insert param exception"); } //申请新节点内存 linknode_t * temp_p = (linknode_t *)malloc(sizeof(linknode_t)); //数据域赋值 temp_p -> data = data; linknode_t * p = head; while(p -> next != NULL && p -> next -> data >= data){ p = p -> next; } //插入新节点 temp_p -> next = p -> next; p -> next = temp_p; } void printf_data_linklist(linknode_t *head){ if(NULL == head){ printf("linklist print fail \n"); } linknode_t * p = head; while(p->next != NULL){ p = p->next; printf("%d ", p -> data); } printf("\n"); } /* *链表是否为空 */ int is_empty_linklist(linknode_t *head){ return head -> next == NULL ? 1 : 0; } /* * * 删除链表元素 */ int delete_data_linklist(linknode_t *head,datatype_t data){ linknode_t *p, *q = NULL; int flag = 0; if(is_empty_linklist(head)){ return -1; } p = head; while(p -> next != NULL){ if(p->next -> data == data){ q = p -> next; p -> next = q -> next; free(q); q = NULL; flag = 1; }else{ p = p -> next; } } if(flag == 1){ return 1; }else{ return -2; } } /* * * 反转单向链表 */ void reverse_data_linklist(linknode_t * head){ linknode_t *p = NULL; linknode_t *q = NULL; //将p节点指向第二个有效节点 p = head -> next -> next; //将第一个有效节点的next指针域置为null head -> next -> next = NULL; while(p != NULL){ q = p -> next; p -> next = head -> next; head -> next = p; p = q; } } /* *清空链表 */ void clean_up_linklist(linknode_t *head){ linknode_t * p = NULL; linknode_t * q = NULL; p = head; while(p != NULL){ printf_data_linklist(p); q = p -> next; free(p); p = q; } } main.c #include "linklist.h" int main(int argc, const char *argv[]) { int cnt = 0, num = 0; linknode_t *head = create_empty_linklist(); printf("请输入要插入链表的节点个数:"); scanf("%d", &cnt); for(int i = 0; i < cnt; i ++){ scanf("%d", &num); //insert_head_linklist(head, num); insert_tail_linklist(head, num); //insert_order_linklist(head, num); } printf_data_linklist(head); #if 0 datatype_t data; printf("请输入要删除的数据:"); scanf("%d", &data); int ret = delete_data_linklist(head, data); if(ret < 0){ printf("data not found or list empty!\n"); }else{ printf("delete data %d success!\n", data); } printf_data_linklist(head); #endif reverse_data_linklist(head); printf_data_linklist(head); clean_up_linklist(head); return 0; } 代码执行 linux@linux:~/test/5-1/linklist$ ./a.out 请输入要插入链表的节点个数:5 1 5 3 7 9 1 5 3 7 9 9 7 3 5 1 9 7 3 5 1 7 3 5 1 3 5 1 5 1 1

得分 100
讨论题

别摸我的键盘 的学生作业:

linklist.h #ifndef __LINKLIST_H__ #define __LINKLIST_H__ #include #include #include typedef int datatype_t; typedef struct node{ datatype_t data; struct node * next; }linknode_t; extern linknode_t *create_empty_linklist(); extern void insert_head_linklist(linknode_t *head,datatype_t data); extern void printf_data_linklist(linknode_t *head); extern void insert_tail_linklist(linknode_t *head,datatype_t data); extern void insert_order_linklist(linknode_t *head,datatype_t data); extern int is_empty_linklist(linknode_t *head); extern int delete_data_linklist(linknode_t *head,datatype_t data); #endif linklist.c #include "linklist.h" /* *初始化链表节点 */ linknode_t *create_empty_linklist(){ linknode_t * l = (linknode_t *)malloc(sizeof(linknode_t)); if(NULL == l){ printf("linknode init fail!\n"); return NULL; } memset(l, 0, sizeof(linknode_t)); return l; } void insert_head_linklist(linknode_t *head, datatype_t data){ if(NULL == head){ printf("linklist head insert param exception"); } //申请新节点内存 linknode_t * temp_p = (linknode_t *)malloc(sizeof(linknode_t)); //数据域赋值 temp_p -> data = data; //插入新节点 temp_p -> next = head -> next; head -> next = temp_p; } void insert_tail_linklist(linknode_t *head, datatype_t data){ if(NULL == head){ printf("linklist tail insert param exception"); } //申请新节点内存 linknode_t * temp_p = (linknode_t *)malloc(sizeof(linknode_t)); //数据域赋值 temp_p -> data = data; linknode_t * p = head; while(p -> next != NULL){ p = p -> next; } //插入新节点 temp_p -> next = p -> next; p -> next = temp_p; } void insert_order_linklist(linknode_t *head, datatype_t data){ if(NULL == head){ printf("linklist order insert param exception"); } //申请新节点内存 linknode_t * temp_p = (linknode_t *)malloc(sizeof(linknode_t)); //数据域赋值 temp_p -> data = data; linknode_t * p = head; while(p -> next != NULL && p -> next -> data >= data){ p = p -> next; } //插入新节点 temp_p -> next = p -> next; p -> next = temp_p; } void printf_data_linklist(linknode_t *head){ if(NULL == head){ printf("linklist print fail \n"); } linknode_t * p = head; while(p->next != NULL){ p = p->next; printf("%d ", p -> data); } printf("\n"); } /* *链表是否为空 */ int is_empty_linklist(linknode_t *head){ return head -> next == NULL ? 1 : 0; } /* * * 删除链表元素 */ int delete_data_linklist(linknode_t *head,datatype_t data){ linknode_t *p, *q = NULL; int flag = 0; if(is_empty_linklist(head)){ return -1; } p = head; while(p -> next != NULL){ if(p->next -> data == data){ q = p -> next; p -> next = q -> next; free(q); q = NULL; flag = 1; }else{ p = p -> next; } } if(flag == 1){ return 1; }else{ return -2; } } main.c #include "linklist.h" int main(int argc, const char *argv[]) { int cnt = 0, num = 0; linknode_t *head = create_empty_linklist(); printf("请输入要插入链表的节点个数:"); scanf("%d", &cnt); for(int i = 0; i < cnt; i ++){ scanf("%d", &num); //insert_head_linklist(head, num); //insert_tail_linklist(head, num); insert_order_linklist(head, num); } printf_data_linklist(head); datatype_t data; printf("请输入要删除的数据:"); scanf("%d", &data); int ret = delete_data_linklist(head, data); if(ret < 0){ printf("data not found or list empty!\n"); }else{ printf("delete data %d success!\n", data); } printf_data_linklist(head); return 0; } 执行结果 linux@linux:~/test/5-1/linklist$ ./a.out 请输入要插入链表的节点个数:9 1 5 3 7 9 5 8 5 3 9 8 7 5 5 5 3 3 1 请输入要删除的数据:3 delete data 3 success! 9 8 7 5 5 5 1

得分 100
讨论题

别摸我的键盘 的学生作业:

linklist.h #ifndef __LINKLIST_H__ #define __LINKLIST_H__ #include #include #include typedef int datatype_t; typedef struct node{ datatype_t data; struct node * next; }linknode_t; extern linknode_t *create_empty_linklist(); extern void insert_head_linklist(linknode_t *head,datatype_t data); extern void printf_data_linklist(linknode_t *head); extern void insert_tail_linklist(linknode_t *head,datatype_t data); extern void insert_order_linklist(linknode_t *head,datatype_t data); #endif linklist.c #include "linklist.h" /* *初始化链表节点 */ linknode_t *create_empty_linklist(){ linknode_t * l = (linknode_t *)malloc(sizeof(linknode_t)); if(NULL == l){ printf("linknode init fail!\n"); return NULL; } memset(l, 0, sizeof(linknode_t)); return l; } void insert_head_linklist(linknode_t *head, datatype_t data){ if(NULL == head){ printf("linklist head insert param exception"); } //申请新节点内存 linknode_t * temp_p = (linknode_t *)malloc(sizeof(linknode_t)); //数据域赋值 temp_p -> data = data; //插入新节点 temp_p -> next = head -> next; head -> next = temp_p; } void insert_tail_linklist(linknode_t *head, datatype_t data){ if(NULL == head){ printf("linklist tail insert param exception"); } //申请新节点内存 linknode_t * temp_p = (linknode_t *)malloc(sizeof(linknode_t)); //数据域赋值 temp_p -> data = data; linknode_t * p = head; while(p -> next != NULL){ p = p -> next; } //插入新节点 temp_p -> next = p -> next; p -> next = temp_p; } void insert_order_linklist(linknode_t *head, datatype_t data){ if(NULL == head){ printf("linklist order insert param exception"); } //申请新节点内存 linknode_t * temp_p = (linknode_t *)malloc(sizeof(linknode_t)); //数据域赋值 temp_p -> data = data; linknode_t * p = head; while(p -> next != NULL && p -> next -> data >= data){ p = p -> next; } //插入新节点 temp_p -> next = p -> next; p -> next = temp_p; } main.c int main(int argc, const char *argv[]) { int cnt = 0, num = 0; linknode_t *head = create_empty_linklist(); printf("请输入要插入链表的节点个数:"); scanf("%d", &cnt); for(int i = 0; i < cnt; i ++){ scanf("%d", &num); //insert_head_linklist(head, num); //insert_tail_linklist(head, num); insert_order_linklist(head, num); } printf_data_linklist(head); return 0; } 执行程序 linux@linux:~/test/5-1/linklist$ ./a.out 请输入要插入链表的节点个数:5 1 5 3 7 9 9 7 5 3 1

微信客服

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

帮助反馈 APP下载

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

公众号

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