
作业社区
探索学习新天地,共享知识资源!
慕粉3149657 的学生作业:
#include void output(char arr[], int len) { for (int i = 0; i < len; ++i) { printf("%c ", arr[i]); } putchar('\n'); return ; } void bubble_sort(char arr[], int len) { char temp = '\0'; for (int i = 0; i < len - 1; ++i) { for (int j = 0; j < len - 2 - i; ++j) { if (arr[j] > arr[j+1]) { temp = arr[j]; arr[j] = arr[j+1]; arr[j+1] = temp; } } } return ; } int main() { unsigned char str[] = "decba"; int strlen = sizeof(str) / sizeof(str[0]); output(str, strlen); bubble_sort(str, strlen); output(str, strlen); return 0; } 【图片】





慕粉3149657 的学生作业:
head.h #ifndef __HEAD_H__ #define __HEAD_H__ #include #include #include typedef int datatype_linknode; //结点 typedef struct node_linkqueue { datatype_linknode data; struct node_linkqueue *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 *q); //判断队列是否为空 extern void enter_linkqueue(linkqueue_t *q,datatype_linknode data); //向队列添加数据 extern datatype_linknode out_linkqueue(linkqueue_t *q); //从队列取出数据 //==============================链式栈============================ //栈头 typedef struct { linknode_t *top; int n; }linkstack_t; extern linkstack_t *create_empty_linkstack(); //创建空链式栈 extern int is_empty_linkstack(linkstack_t *s); //判断链式栈是否为空 extern void push_linkstack(linkstack_t *s,datatype_linknode data); //压入数据 extern datatype_linknode pop_linkstack(linkstack_t *s); //弹出数据 extern datatype_linknode get_top_data(linkstack_t *s); //取得栈头数据 #endif head.c #include "head.h" //================================链式队列=================== //创建空链式队列 linkqueue_t *create_empty_linkqueue() { //创建队列头 linkqueue_t *q = NULL; q = (linkqueue_t *)malloc(sizeof(linkqueue_t)); if(NULL == q) { printf("malloc is fail!"); return NULL; } memset(q,0,sizeof(linkqueue_t)); //创建头结点 linknode_t *head = NULL; head = (linknode_t *)malloc(sizeof(linknode_t)); memset(head,0,sizeof(linknode_t)); head->next = NULL; //使头指针和尾指针指向头结点 q->front = head; q->rear = head; return q; } //判断队列是否为空 int is_empty_linkqueue(linkqueue_t *q) { return q->front == q->rear ? 1 : 0; } //向队列添加数据 void enter_linkqueue(linkqueue_t *q,datatype_linknode data) { //创建新结点 linknode_t *p_new_node = NULL; p_new_node = (linknode_t *)malloc(sizeof(linknode_t)); //将数据赋给新结点 p_new_node->data = data; //将新结点添加为队列尾结点 p_new_node->next = q->rear->next; q->rear->next = p_new_node; //更新尾指针 q->rear = p_new_node; return; } //从队列取出数据 datatype_linknode out_linkqueue(linkqueue_t *q) { //新建指向头结点下一结点的指针 linknode_t *p_node = q->front->next; //保存队列头结点下一结点的数据 datatype_linknode data = p_node->data; //更新头指针 q->front->next = p_node->next; if(NULL == q->front->next) q->rear = q->front; //释放原头结点下一结点的内存 free(p_node),p_node = NULL; //返回数据 return data; } //===========================链式栈========================== //创建空链式栈 linkstack_t *create_empty_linkstack() { //创建栈头 linkstack_t *s = NULL; s = (linkstack_t *)malloc(sizeof(linkstack_t)); if(NULL == s) { printf("malloc is fail!"); return NULL; } memset(s,0,sizeof(linkstack_t)); s->top = NULL; s->n = 0; return s; } //判断链式栈是否为空 int is_empty_linkstack(linkstack_t *s) { return s->top == NULL ? 1 : 0; } //压入数据 void push_linkstack(linkstack_t *s,datatype_linknode data) { //创建新结点 linknode_t *p_new_node = NULL; p_new_node = (linknode_t *)malloc(sizeof(linknode_t)); if(NULL == p_new_node){ printf("malloc is fail!"); return; } //更新头结点 p_new_node->data = data; p_new_node->next = s->top; s->top = p_new_node; s->n++; } //弹出数据 datatype_linknode pop_linkstack(linkstack_t *s) { //创建指向栈头的指针 linknode_t *temp; temp = s->top; //保存栈头数据 datatype_linknode data; data = temp->data; //释放栈头 s->top = temp->next; free(temp),temp = NULL; s->n--; return data; } //取得栈头数据 datatype_linknode get_top_data(linkstack_t *s) { return s->top->data; } main.c #include "head.h" #define MAX_MIN_STACK 5 #define MAX_MIN5_STACK 12 #define MAX_HOUR_STACK 12 int max_ball_queue = 0; int ball[100] = {0}; int half_day = 0; linkqueue_t *ball_queue = NULL; linkstack_t *min_stack = NULL; linkstack_t *min5_stack = NULL; linkstack_t *hour_stack = NULL; void init_ball_clock() { half_day = 0; ball_queue = create_empty_linkqueue(); min_stack = create_empty_linkstack(); min5_stack = create_empty_linkstack(); hour_stack = create_empty_linkstack(); } datatype_linknode pop_to_ball_queue(linkstack_t *s) { datatype_linknode data = pop_linkstack(s); while(!is_empty_linkstack(s)) enter_linkqueue(ball_queue,pop_linkstack(s)); return data; } void do_ball_clock() { if(is_empty_linkqueue(ball_queue)) enter_linkqueue(ball_queue,++max_ball_queue); push_linkstack(min_stack,out_linkqueue(ball_queue)); if(MAX_MIN_STACK == min_stack->n) push_linkstack(min5_stack,pop_to_ball_queue(min_stack)); if(MAX_MIN5_STACK == min5_stack->n) push_linkstack(hour_stack,pop_to_ball_queue(min5_stack)); if(MAX_HOUR_STACK == hour_stack->n) { enter_linkqueue(ball_queue,pop_to_ball_queue(hour_stack)); half_day++; } } void print_ball_clock() { int day = half_day / 2; int hour = hour_stack->n + 12*(half_day % 2); int min = min_stack->n + min5_stack->n * 5; printf("day %d %02d:%02d\n",day,hour,min); } void store_ball_seq() { int n = 0; linknode_t *p = NULL; p = ball_queue->front->next; while(NULL != p) { ball[n++] = p->data; p = p->next; } } int check_ball_seq() { int n = 0; linknode_t *p = NULL; p = ball_queue->front->next; while(NULL != p) { if(ball[n++] != p->data) break; p = p->next; } if(n == max_ball_queue) return 1; return 0; } int main() { //question 1 //每分钟计数若球不够自动添加球,循环60×12次,即12小时,最终得到所需球数量 init_ball_clock(); for(int i = 0;i < 60*12;i++){ do_ball_clock(); } printf("最少需要球数 = %d\n",max_ball_queue); //question 2 //根据question1得到的结果,按编号0-26依次加入球队列,并记录其顺序 //每分钟时间计数检查是否与最初顺序相同,否则继续时间计数,最终得出所需时间 init_ball_clock(); for(int i = 0;i < max_ball_queue;i++) enter_linkqueue(ball_queue,i); store_ball_seq(); do{ do_ball_clock(); }while(!check_ball_seq()); printf("最少需要时间: "); print_ball_clock(); return 0; } 【图片】





慕粉3149657 的学生作业:
void push(seqstack_t *s, datatype_t data) { if (is_full_stack(s)) { printf("栈已满!\n"); return; } s->buf[++s->top] = data; } datatype_t pop(seqstack_t *s) { if (is_empty_stack(s)) { printf("栈为空!\n"); return '\0'; } return s->buf[s->top--]; } int is_empty_stack(seqstack_t *s) { return s->top == -1; } int is_full_stack(seqstack_t *s) { return s->top == MAX - 1; } datatype_t get_top_data(seqstack_t *s) { return s->buf[s->top]; } 【图片】





慕粉3149657 的学生作业:
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; extern void insert_tail_looplist(loopnode_t *head, datatype_t data); extern loopnode_t *create_node(); extern void Josephu(int n, int k, int m); #endif looplist.c: #include "looplist.h" loopnode_t *create_node() { loopnode_t *temp = NULL; temp = (loopnode_t *)malloc(sizeof(loopnode_t)); if(NULL == temp){ printf("malloc is failed\n"); return NULL; } memset(temp,0,sizeof(loopnode_t)); return temp; } void insert_tail_looplist(loopnode_t *head, datatype_t data) { loopnode_t *temp = create_node(); loopnode_t *p = head; //注释,从第一个元素head开始判断,如果.next的值不为NULL 就把下一个元素赋值给p p=p->next 继续循环,直到p为最后一个元素 while(p->next!=head) { p = p->next; } //找到最后一个元素后要注意,第一步一定是先往要插入的元素存原来位置的元素地址(虽然是NULL), temp->next = p->next //第二步才是把要插入的元素地址存储到最后一个元素next上 p->next = temp; temp->data = data; temp->next = p->next; p->next = temp; } void Josephu(int n, int k, int m) { loopnode_t *head = create_node(); loopnode_t *cur_node = NULL; loopnode_t *target_node= NULL; loopnode_t *pre_node = NULL; int total = 0; head->data = 1; head->next = head; cur_node = head; total ++; for(int i=2; inext = cur_node->next; printf("%d ", target_node->data); cur_node = cur_node->next; free(target_node); target_node = NULL; total--; } printf("\n"); } main.c: #include "looplist.h" int main() { int n,k,m; printf("请输入[成员数,开始序号,报名数]:\n"); scanf("%d%d%d",&n,&k,&m); Josephu(n, k, m); return 0; }





慕粉3149657 的学生作业:
int is_empty_seqlist(seqlist_t *l) { return l->n == 0?1:0; } int delete_data_seqlist(seqlist_t *l,datatype_t data) { if(is_empty_seqlist(l)) { return -1; } int i, j = 0; for (i = 0; i < l->n; i++) { if(l->buf[i].id!=data.id) { l->buf[j] = l->buf[i]; j++; } } l->n = j; if(i==j) { return -2; }else { printf("delete successful\n"); } }




