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

作业社区

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

0 提交作业
0 布置作业
0 满分作业
得分 100
学习任务

RX0_UNICORN 的学生作业:

链式栈练习 // linkstack.h #ifndef __LINKSTACK_H__ #define __LINKSTACK_H__ #include #include #include typedef char data_t; typedef struct node { data_t data; struct node *next; }linknode_t; typedef struct { linknode_t *top; // 栈顶指针 int n; // 栈中元素个数 }linkstack_t; extern linkstack_t *create_empty_linkstack(); extern int is_empty_linkstack(linkstack_t *sl); extern int push_linkstack(linkstack_t *sl, data_t data); extern data_t pop_linkstack(linkstack_t *sl); extern data_t get_top_data(linkstack_t *sl); #endif // linkstack.c #include "linkstack.h" // 创建空的栈顶 linkstack_t *create_empty_linkstack() { linkstack_t *sl = NULL; sl = (linkstack_t *)malloc(sizeof(linkstack_t)); if(NULL == sl) { printf("malloc is fail!\n"); return NULL; } memset(sl, 0, sizeof(linkstack_t)); sl->top = NULL; return sl; } // 判空 int is_empty_linkstack(linkstack_t *sl) { return sl->top == NULL ? 1 : 0; } // 入栈 int push_linkstack(linkstack_t *sl, data_t data) { // 为新节点申请堆区空间,并为 temp->data 赋值 linknode_t *temp = (linknode_t *)malloc(sizeof(linknode_t)); if(NULL == temp) { printf("temp malloc is fail!\n"); return -1; } temp->data = data; // temp->next = sl->top; sl->top = temp; sl->n++; return 0; } // 出栈 data_t pop_linkstack(linkstack_t *sl) { // 保存删除节点的地址(原栈顶指针) linknode_t *temp = sl->top; // 保存节点数据 data_t data = temp->data; // 更新栈顶指针,--- 即将删除节点保存的下一个节点的地址 sl->top = temp->next; // 释放空间 free(temp); temp = NULL; // 更新 n sl->n--; return data; } // 打印栈顶元素 data_t get_top_data(linkstack_t *sl) { return sl->top->data; } // linkstack main.c #include "linkstack.h" int main(int argc, const char *argv[]) { data_t data[] = {'a','n','i','h','c',' ','e','v','o','l',' ','I'}; linkstack_t *sl = create_empty_linkstack(); for (int i = 0; i < sizeof(data)/sizeof(data[0]); i++) { push_linkstack(sl, data[i]); } // data_t top_d = get_top_data(sl); // printf("%c\n", top_d); while (!is_empty_linkstack(sl)) { data_t ret = pop_linkstack(sl); printf("%c", ret); } printf("\n"); return 0; } 链式队列练习 // linkqueue.h #ifndef __LINKQUEUE_H__ #define __LINKQUEUE_H__ #include #include #include typedef char data_t; // 链式队列节点类型 typedef struct node { data_t data; struct node *next; }linknode_t; // 链式队列队列头类型 typedef struct { linknode_t *front; linknode_t *rear; }linkqueue_t; extern linkqueue_t *create_empty_linkqueue(); extern int is_empty_linkqueue(linkqueue_t *lq); extern void enter_data_linkqueue(linkqueue_t *lq, data_t data); extern data_t delete_data_linkqueue(linkqueue_t *lq); #endif // linkqueue.c #include "linkqueue.h" linkqueue_t *create_empty_linkqueue() { linkqueue_t *lq = NULL; linknode_t *head = NULL; head = (linknode_t *)malloc(sizeof(linknode_t)); lq = (linkqueue_t *)malloc(sizeof(linkqueue_t)); if(NULL == lq || NULL == head) { printf("malloc is fail!\n"); return NULL; } head->next = NULL; lq->front = lq->rear = head; return lq; } int is_empty_linkqueue(linkqueue_t *lq) { return lq->front == lq->rear ? 1 : 0; } void enter_data_linkqueue(linkqueue_t *lq, data_t data) { linknode_t *temp = NULL; temp = (linknode_t *)malloc(sizeof(linknode_t)); if(NULL == temp) { printf("malloc is fail!\n"); return; } temp->data = data; temp->next = lq->rear->next; lq->rear->next = temp; lq->rear = temp; return; } data_t delete_data_linkqueue(linkqueue_t *lq) { data_t data; linknode_t *temp = NULL; temp = lq->front->next; data = temp->data; lq->front->next = temp->next; free(temp); temp = NULL; if(lq->front->next == NULL) { lq->rear = lq->front; } return data; } // linkqueue main.c #include "linkqueue.h" int main(int argc, const char *argv[]) { char data[] = {'I', ' ', 'L', 'o', 'v', 'e', ' ', 'C', 'h', 'i', 'n', 'a'}; linkqueue_t *lq = create_empty_linkqueue(); for(int i = 0; i < sizeof(data)/sizeof(data[0]); i++) { enter_data_linkqueue(lq, data[i]); } while(!is_empty_linkqueue(lq)) { data_t ret = delete_data_linkqueue(lq); printf("%c", ret); } printf("\n"); return 0; }

得分 100
讨论题

RX0_UNICORN 的学生作业:

// seqstack.h #ifndef __SEQSTACK_H__ #define __SEQSTACK_H__ #include #include #include typedef char data_t; #define MAX 20 typedef struct { data_t buf[MAX]; int top; }seqstack_t; extern seqstack_t *create_empty_seqstack(); extern int is_empty_seqstack(seqstack_t *st); extern int is_full_seqstack(seqstack_t *st); extern void push_seqstack(seqstack_t *st, data_t data); extern data_t pop_seqstack(seqstack_t *st); extern data_t get_top_seqstack(seqstack_t *st); #endif // seqstack.c #include "seqstack.h" // 创建空栈 seqstack_t *create_empty_seqstack() { seqstack_t * st = NULL; st = (seqstack_t *)malloc(sizeof(seqstack_t)); if(NULL == st) { printf("malloc is fail!\n"); return NULL; } memset(st, 0, sizeof(seqstack_t)); st->top = -1; return st; } // 判断栈是否为空 int is_empty_seqstack(seqstack_t *st) { return st->top == -1 ? 1 : 0; } // 判断栈是否为满 int is_full_seqstack(seqstack_t *st) { return st->top == MAX - 1 ? 1 : 0; } // 入栈 void push_seqstack(seqstack_t *st, data_t data) { st->top++; st->buf[st->top] = data; return; } // 出栈 data_t pop_seqstack(seqstack_t *st) { #if 0 data_t data; data = st->buf[st->top]; st->top--; return data; #endif return st->buf[st->top--]; } // 获取栈顶元素 data_t get_top_seqstack(seqstack_t *st) { return st->buf[st->top]; } // main.c #include "seqstack.h" int main(int argc, const char *argv[]) { data_t data[] = {'a','n','i','h','c',' ','e','v','o','l',' ','I'}; seqstack_t *st = create_empty_seqstack(); int i = 0; int len = sizeof(data)/sizeof(data[0]); while(!is_full_seqstack(st) && i < len) { push_seqstack(st, data[i]); i++; } // data_t top_d = get_top_seqstack(st); // printf("top : %c\n", top_d); while(!is_empty_seqstack(st)) { data_t ret = pop_seqstack(st); printf("%c ", ret); } printf("\n"); return 0; } 【图片】

得分 100
讨论题

RX0_UNICORN 的学生作业:

// joseph.h #ifndef __JOSEPH_H__ #define __JOSEPH_H__ #include #include typedef int datatype_t; typedef struct node { datatype_t data; struct node *next; }loopnode_t; extern loopnode_t *create_circular_linklist(int n); extern void josephus_problem(int n, int k, int m); #endif // joseph.c #include "joseph.h" // 创建循环链表 loopnode_t *create_circular_linklist(int n) { if (n data = 1; loopnode_t *current = head; for (int i = 2; i data = i; current->next = newNode; current = newNode; } // 将链表首尾相连形成循环 current->next = head; return head; } // 解决约瑟夫问题 void josephus_problem(int n, int k, int m) { // 创建循环链表 loopnode_t *head = createCircularLinkedList(n); if (head == NULL) return; // 移动到第k个节点 loopnode_t *current = head; loopnode_t *prev = NULL; // 找到第k个节点 for (int i = 1; i < k; i++) { prev = current; current = current->next; } while (current->next != current) { // 数m-1次,因为当前节点从1开始计数 for (int i = 1; i < m; i++) { prev = current; current = current->next; } // 删除当前节点 prev->next = current->next; printf("%d ", current->data); // 如果不是最后一个节点,打印逗号分隔 if (current->next != prev->next) { printf(" "); } loopnode_t *temp = current; current = current->next; free(temp); } // 处理最后一个节点 printf("%d\n", current->data); free(current); } // main.c #include "joseph.h" int main(int argc, const char *argv[]) { int n, k, m; printf("please input n k m : "); scanf("%d%d%d", &n, &k, &m); printf("n = %d, k = %d, m = %d 时的出列序列:\n", n, k, m); josephus_problem(n, k, m); return 0; } 【图片】

微信客服

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

帮助反馈 APP下载

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

公众号

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