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

作业社区

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

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

史啦啦 的学生作业:

#include #include // 定义单链表节点结构 typedef struct Node { int data; // 存储编号 struct Node *next; // 指向下一个节点的指针 } Node; // 创建循环链表 Node* createCircularList(int n) { Node *head = NULL; Node *tail = NULL; Node *newNode; // 创建n个节点并构建循环链表 for (int i = 1; i data = i; newNode->next = NULL; if (head == NULL) { head = newNode; tail = newNode; } else { tail->next = newNode; tail = newNode; } } // 使链表循环,最后一个节点指向头节点 tail->next = head; return head; } // 打印链表 void printList(Node* head) { Node *current = head; do { printf("%d ", current->data); current = current->next; } while (current != head); printf("\n"); } // 实现约瑟夫问题 void josephus(int n, int k, int m) { Node *head = createCircularList(n); Node *current = head; Node *prev = NULL; printf("出列顺序: "); // 找到第k个人 for (int i = 1; i < k; i++) { prev = current; current = current->next; } // 循环直到所有人出列 while (current != current->next) { // 直到链表中只剩一个节点 // 计数到m,找到要出列的人 for (int i = 1; i < m; i++) { prev = current; current = current->next; } // 输出出列人的编号 printf("%d ", current->data); // 删除当前节点 prev->next = current->next; // 释放当前节点 free(current); // 更新当前节点 current = prev->next; } // 输出最后一个人 printf("%d\n", current->data); free(current); // 释放最后一个人节点 } int main() { int n, k, m; // 输入n, k, m的值 printf("请输入总人数n: "); scanf("%d", &n); printf("请输入起始位置k: "); scanf("%d", &k); printf("请输入计数的步数m: "); scanf("%d", &m); // 调用约瑟夫问题函数 josephus(n, k, m); return 0; } 【图片】

得分 100
学习任务

史啦啦 的学生作业:

//head.h #ifndef _HEAD_H__ #define _HEAD_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 printf_data_linklist(linknode_t* head); extern void insert_head_linklist(linknode_t* head,datatype_t data); extern void insert_tail_linklist(linknode_t* head,datatype_t data); extern void insert_order_linklist(linknode_t *head,datatype_t data); extern void insert_order2_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 #include "linklist.h" linknode_t* create_empty_linklist() { linknode_t* head = NULL; //为头节点在堆区分配空间,用指针head保存 //头节点的指针域为NULL head = (linknode_t*)malloc(sizeof(linknode_t)); if(NULL == head) { printf("malloc is fail!\n"); return NULL; } memset(head,0,sizeof(linknode_t)); head->next = NULL; return head; } //头插法 void insert_head_linklist(linknode_t* head,datatype_t data) { //1.为新节点在堆区分配空间,用指针temp保留 linknode_t* temp = NULL; temp = (linknode_t*)malloc(sizeof(linknode_t)); //2.吧data数据放到temp节点的数据域 temp->data = data; //3.把temp节点插入到head节点后面 temp->next = head->next; head->next = temp; return ; } //输出链表中的内容 void printf_data_linklist(linknode_t* head) { linknode_t* p = head; while(p->next != NULL) { printf("%d ",p->next->data); p = p->next; } printf("\n"); return; } //尾插法 void insert_tail_linklist(linknode_t* head,datatype_t data) { //1.为新节点在堆区分配空间,用指针temp保存 linknode_t *temp = NULL; temp = (linknode_t *)malloc(sizeof(linknode_t)); //2.把data数据放到temp结点的数据域 temp->data = data; //3.循环遍历找到尾结点 linknode_t *p = head; while(p->next != NULL) { p = p->next; } //4.在p后插入temp结点 temp->next = p->next; p->next = temp; return ; } //有序插入 void insert_order_linklist(linknode_t *head,datatype_t data) { //1.为新节点在堆区分配空间,用指针temp保存 linknode_t *temp = NULL; temp = (linknode_t *)malloc(sizeof(linknode_t)); //2.把data数据放到temp结点的数据域 temp->data = data; linknode_t *p = head; while(p->next != NULL && data > p->next->data) { p = p->next; } //在p结点后插入我们的数据data temp->next = p->next; p->next = temp; return ; } //有序插入2 void insert_order2_linklist(linknode_t* head,datatype_t data) { //1.为新节点在堆区分配空间,用指针temp保存 linknode_t* temp = NULL; temp = (linknode_t*)malloc(sizeof(linknode_t)); temp->data = data; linknode_t* p = head; while(p->next != NULL && data < p->next->data) { p = p->next; } temp->next = p->next; p->next = temp; } 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 = NULL; linknode_t* 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; } } //若是删除的数据不存在,返回-2 if(flag == 0) { return -2; } else { printf("delete %d is successful!\n",data); } return 0; } //链表的逆序 void reverse_data_linklist(linknode_t *head) { linknode_t *p = NULL; linknode_t *q = NULL; //1.p保存第二个有效结点的地址,并且把第一个有效结点 //的指针域设置为NULL p = head->next->next; head->next->next = NULL; //2.从p结点开始,依次使用头插法的思想, //把p结点插入到头结点后面 while(p != NULL) { q = p->next; //保存p后面结点的地址 //把p结点存放到head结点后 p->next = head->next; head->next =p; p = q; } return ; } //删除链表中所有的节点 void clean_up_linklist(linknode_t* head) { linknode_t* p = head; linknode_t* q = NULL; while(p != NULL) { q = p->next; printf_data_linklist(p); free(p); p = q; } return ; } #include "linklist.h" int main(int argc, const char *argv[]) { linknode_t* head = NULL; int n = 0,i = 0,ret = 0; datatype_t data; head = create_empty_linklist(); printf("please input you want insert data number:"); scanf("%d",&n); printf("please input %d data:",n); for(i = 0;i

得分 100
学习任务

北城半夏4806197 的学生作业:

#include #include #include #include #include #include #include #include #include #define FIFO_PATH "/tmp/my_fifo" #define BUFFER_SIZE 1024 #define EPOLL_SIZE 10 int main() { int epoll_fd, fifo_fd; struct epoll_event ev, events[EPOLL_SIZE]; char buffer[BUFFER_SIZE]; int n, nfds; // 创建有名管道(如果尚未创建) if (mkfifo(FIFO_PATH, 0666) == -1) { if (errno != EEXIST) { perror("mkfifo"); exit(EXIT_FAILURE); } } // 打开管道,以只读模式 fifo_fd = open(FIFO_PATH, O_RDONLY | O_NONBLOCK); // 使用非阻塞模式 if (fifo_fd == -1) { perror("open"); exit(EXIT_FAILURE); } // 创建 epoll 实例 epoll_fd = epoll_create(EPOLL_SIZE); if (epoll_fd == -1) { perror("epoll_create"); exit(EXIT_FAILURE); } // 将管道文件描述符注册到 epoll 实例中 ev.events = EPOLLIN; // 监听可读事件 ev.data.fd = fifo_fd; if (epoll_ctl(epoll_fd, EPOLL_CTL_ADD, fifo_fd, &ev) == -1) { perror("epoll_ctl"); exit(EXIT_FAILURE); } printf("等待数据...\n"); // 等待事件 while (1) { nfds = epoll_wait(epoll_fd, events, EPOLL_SIZE, 5000); // 等待 5 秒 if (nfds == -1) { perror("epoll_wait"); exit(EXIT_FAILURE); } else if (nfds == 0) { printf("超时,没有数据可读取。\n"); break; // 超时退出 } else { for (int i = 0; i < nfds; i++) { if (events[i].data.fd == fifo_fd && (events[i].events & EPOLLIN)) { n = read(fifo_fd, buffer, BUFFER_SIZE); if (n == -1) { if (errno == EAGAIN || errno == EWOULDBLOCK) { printf("没有数据可读取,继续等待...\n"); } else { perror("read"); exit(EXIT_FAILURE); } } else if (n > 0) { buffer[n] = '\0'; // 确保字符串以 null 结尾 printf("接收到数据: %s\n", buffer); } } } } } // 清理资源 close(fifo_fd); close(epoll_fd); unlink(FIFO_PATH); // 删除管道文件 return 0; }

得分 100
讨论题

史啦啦 的学生作业:

//head.h #ifndef _HEAD_H__ #define _HEAD_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 printf_data_linklist(linknode_t* head); extern void insert_head_linklist(linknode_t* head,datatype_t data); extern void insert_tail_linklist(linknode_t* head,datatype_t data); extern void insert_order_linklist(linknode_t *head,datatype_t data); extern void insert_order2_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 #include "linklist.h" linknode_t* create_empty_linklist() { linknode_t* head = NULL; //为头节点在堆区分配空间,用指针head保存 //头节点的指针域为NULL head = (linknode_t*)malloc(sizeof(linknode_t)); if(NULL == head) { printf("malloc is fail!\n"); return NULL; } memset(head,0,sizeof(linknode_t)); head->next = NULL; return head; } //头插法 void insert_head_linklist(linknode_t* head,datatype_t data) { //1.为新节点在堆区分配空间,用指针temp保留 linknode_t* temp = NULL; temp = (linknode_t*)malloc(sizeof(linknode_t)); //2.吧data数据放到temp节点的数据域 temp->data = data; //3.把temp节点插入到head节点后面 temp->next = head->next; head->next = temp; return ; } //输出链表中的内容 void printf_data_linklist(linknode_t* head) { linknode_t* p = head; while(p->next != NULL) { printf("%d ",p->next->data); p = p->next; } printf("\n"); return; } //尾插法 void insert_tail_linklist(linknode_t* head,datatype_t data) { //1.为新节点在堆区分配空间,用指针temp保存 linknode_t *temp = NULL; temp = (linknode_t *)malloc(sizeof(linknode_t)); //2.把data数据放到temp结点的数据域 temp->data = data; //3.循环遍历找到尾结点 linknode_t *p = head; while(p->next != NULL) { p = p->next; } //4.在p后插入temp结点 temp->next = p->next; p->next = temp; return ; } //有序插入 void insert_order_linklist(linknode_t *head,datatype_t data) { //1.为新节点在堆区分配空间,用指针temp保存 linknode_t *temp = NULL; temp = (linknode_t *)malloc(sizeof(linknode_t)); //2.把data数据放到temp结点的数据域 temp->data = data; linknode_t *p = head; while(p->next != NULL && data > p->next->data) { p = p->next; } //在p结点后插入我们的数据data temp->next = p->next; p->next = temp; return ; } //有序插入2 void insert_order2_linklist(linknode_t* head,datatype_t data) { //1.为新节点在堆区分配空间,用指针temp保存 linknode_t* temp = NULL; temp = (linknode_t*)malloc(sizeof(linknode_t)); temp->data = data; linknode_t* p = head; while(p->next != NULL && data < p->next->data) { p = p->next; } temp->next = p->next; p->next = temp; } 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 = NULL; linknode_t* 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; } } //若是删除的数据不存在,返回-2 if(flag == 0) { return -2; } else { printf("delete %d is successful!\n",data); } return 0; } #include "linklist.h" int main(int argc, const char *argv[]) { linknode_t* head = NULL; int n = 0,i = 0,ret = 0; datatype_t data; head = create_empty_linklist(); printf("please input you want insert data number:"); scanf("%d",&n); printf("please input %d data:",n); for(i = 0;i

得分 100
讨论题

史啦啦 的学生作业:

#include "linklist.h" linknode_t* create_empty_linklist() { linknode_t* head = NULL; //为头节点在堆区分配空间,用指针head保存 //头节点的指针域为NULL head = (linknode_t*)malloc(sizeof(linknode_t)); if(NULL == head) { printf("malloc is fail!\n"); return NULL; } memset(head,0,sizeof(linknode_t)); head->next = NULL; return head; } //头插法 void insert_head_linklist(linknode_t* head,datatype_t data) { //1.为新节点在堆区分配空间,用指针temp保留 linknode_t* temp = NULL; temp = (linknode_t*)malloc(sizeof(linknode_t)); //2.吧data数据放到temp节点的数据域 temp->data = data; //3.把temp节点插入到head节点后面 temp->next = head->next; head->next = temp; return ; } //输出链表中的内容 void printf_data_linklist(linknode_t* head) { linknode_t* p = head; while(p->next != NULL) { printf("%d ",p->next->data); p = p->next; } printf("\n"); return; } //尾插法 void insert_tail_linklist(linknode_t* head,datatype_t data) { //1.为新节点在堆区分配空间,用指针temp保存 linknode_t *temp = NULL; temp = (linknode_t *)malloc(sizeof(linknode_t)); //2.把data数据放到temp结点的数据域 temp->data = data; //3.循环遍历找到尾结点 linknode_t *p = head; while(p->next != NULL) { p = p->next; } //4.在p后插入temp结点 temp->next = p->next; p->next = temp; return ; } //有序插入 void insert_order_linklist(linknode_t *head,datatype_t data) { //1.为新节点在堆区分配空间,用指针temp保存 linknode_t *temp = NULL; temp = (linknode_t *)malloc(sizeof(linknode_t)); //2.把data数据放到temp结点的数据域 temp->data = data; linknode_t *p = head; while(p->next != NULL && data > p->next->data) { p = p->next; } //在p结点后插入我们的数据data temp->next = p->next; p->next = temp; return ; } //有序插入2 void insert_order2_linklist(linknode_t* head,datatype_t data) { //1.为新节点在堆区分配空间,用指针temp保存 linknode_t* temp = NULL; temp = (linknode_t*)malloc(sizeof(linknode_t)); temp->data = data; linknode_t* p = head; while(p->next != NULL && data < p->next->data) { p = p->next; } temp->next = p->next; p->next = temp; } //head.h #ifndef _HEAD_H__ #define _HEAD_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 printf_data_linklist(linknode_t* head); extern void insert_head_linklist(linknode_t* head,datatype_t data); extern void insert_tail_linklist(linknode_t* head,datatype_t data); extern void insert_order_linklist(linknode_t *head,datatype_t data); extern void insert_order2_linklist(linknode_t* head,datatype_t data); #endif #include "linklist.h" int main(int argc, const char *argv[]) { linknode_t* head = NULL; int n = 0,i = 0,ret = 0; datatype_t data; head = create_empty_linklist(); printf("please input you want insert data number:"); scanf("%d",&n); printf("please input %d data:",n); for(i = 0;i

得分 100
学习任务

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

#include #include #include #include #include #include void deal_signal(int num){ printf("custom signal deal fuc, content is %s\n", strsignal(num)); } int main(int argc, const char *argv[]) { //if(signal(SIGUSR2, deal_signal)== SIG_ERR){ // perror("[ERROR] signal()"); // exit(EXIT_FAILURE); //} pid_t a_pid = fork(); if(a_pid == -1){ perror("[ERROR] fork()"); exit(EXIT_FAILURE); }else if(a_pid == 0){ //child a process printf("a process running\n"); int ret = pause(); if(ret == -1){ perror("[ERROR] a pause()"); exit(EXIT_FAILURE); } printf("a pause after content\n"); exit(EXIT_SUCCESS); }else if(a_pid > 0){ pid_t b_pid = fork(); if(b_pid == -1){ perror("[ERROR] fork()"); exit(EXIT_FAILURE); }else if(b_pid == 0){ //child b process if(signal(SIGUSR2, deal_signal)== SIG_ERR){ perror("[ERROR] signal()"); exit(EXIT_FAILURE); } pause(); sleep(2); printf("b process running\n"); exit(EXIT_SUCCESS); }else if(b_pid > 0){ printf("main process running\n"); sleep(2); int ret = kill(a_pid, SIGUSR1); if(ret == -1){ perror("[ERROR] a kill()"); exit(EXIT_FAILURE); } ret = kill(b_pid, SIGUSR2); if(ret == -1){ perror("[ERROR] b kill()"); exit(EXIT_FAILURE); } if(wait(NULL) == -1){ perror("[ERROR] wait()"); exit(EXIT_FAILURE); } if(wait(NULL) == -1){ perror("[ERROR] wait()"); exit(EXIT_FAILURE); } printf("all child process dealed\n"); exit(EXIT_SUCCESS); } } return 0; }

微信客服

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

帮助反馈 APP下载

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

公众号

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