作业社区
探索学习新天地,共享知识资源!
慕斯卡4428351 的学生作业:
练习1: int max(int x,int y) { return x > y ? x : y; } int deep_binary_tree(bitree_t *root) { if(root == NULL) return 1; if(root->lchild != NULL || root->rchild != NULL) return 1 + max(deep_binary_tree(root->lchild),\ deep_binary_tree(root->rchild)); } 练习2: void sort_linklist(linklist_t *head) { if(head == NULL || head->next == NULL) return ; linklist_t *pre = NULL; linklist_t *post = NULL; linklist_t *end = NULL; while(head->next != end) { pre = head->next; post = pre->next; while(post != end) { if(pre->data > post->data) { pre->data ^= post->data; post->data ^= pre->data; pre->data ^= post->data; } pre = post; post = pre->next; } end = pre; } return ; } 练习3 linknode_t *and_linklist(linknode_t *head1, linknode_t *head2) { linknode_t *p1 = head1->next; linknode_t *p2 = head2->next; linknode_t *head = head1; linknode_t *tail = head; // 循环比较两个有效节点 while (p1 != NULL && p2 != NULL) { if (p1->data data) { tail->next = p1; p1 = p1->next; } else { tail->next = p2; p2 = p2->next; } tail = tail->next; } if (p1 != NULL) tail->next = p1; if (p2 != NULL) tail->next = p2; return head; // 返回新的带头结点的链表头 } 练习4: 【图片】
慕斯卡4428351 的学生作业:
#include "linkstack.h" int get_level(char operator) { switch(operator) { case '+': case '-': return 1; case '*': case '/': return 2; default: printf("%c is invalid\n",operator); return -1; } } int compute(linkstack_t *operand,linkstack_t *operator) { int a = 0,b = 0; char c = 0; int data = 0; b = pop_linkstack(operand); a = pop_linkstack(operand); c = (char)pop_linkstack(operator); // printf("b = %d,a = %d\n",b,a); // printf("c = %c\n",c); switch(c) { case '+': data = a + b; break; case '-': data = a - b; break; case '*': data = a * b; break; case '/': data = a / b; break; default: break; } push_linkstack(operand,data); // printf("data = %d\n",data); return data; } int calc_value(char *buf) { int i = 0; int data = 0; int flag = 0; char operator_top = 0; int operand_top = 0; linkstack_t *operand = NULL; linkstack_t *operator = NULL; operand = create_empty_linkstack(); operator = create_empty_linkstack(); for(i = 0;buf[i] != '\0';i++) { //calc the int if(buf[i] >= '0' && buf[i] = get_level(buf[i])) { compute(operand,operator); if(!is_empty_linkstack(operator)) operator_top = (char)get_top_data(operator); else break; } push_linkstack(operator,buf[i]); } } } while(!is_empty_linkstack(operator)) compute(operand,operator); return pop_linkstack(operand); } int main() { char buf[1024] = "(4+8)*2-3"; int value = 0; value = calc_value(buf); printf("%s = %d\n",buf,value); return 0; }
万物皆流2026 的学生作业:
** looplist1.h ** #ifndef _LOOPLIST1_H_ #define _LOOPLIST1_H_ #include #include #include typedef int datatype_t; typedef struct node { datatype_t data; struct node* next; } loopnode_t; #define N 8 #define K 3 #define M 4 extern int insert_data_looplist(loopnode_t** head,datatype_t data); extern int empty_data_looplist(loopnode_t** head); extern void print_data_looplist(loopnode_t** head); extern void josephu_data_looplist(loopnode_t** head,datatype_t k,datatype_t m); #endif ** looplist1.c ** #include "looplist1.h" int empty_data_looplist(loopnode_t** head) { return *head==NULL?1:0; } int insert_data_looplist(loopnode_t** head,datatype_t data) { loopnode_t* temp=(loopnode_t*)malloc(sizeof(loopnode_t)); if (NULL==temp) { printf("节点空间申请失败!\n"); return -1; } temp->data=data; if (empty_data_looplist(head)) { *head=temp; //当为空链,头指针指向节点temp,temp即为首元节点 temp->next=temp; // 为循环单链 return 0; } loopnode_t* p=*head; //指针p指向首元节点 while (p->next!=*head) { p=p->next; //在非空链是,指针p从首元节点向后移动,直至指向链尾节点 } temp->next=*head; p->next=temp; //尾插法插入新节点,保证循环所以temp->next!=NULL return 0; } void josephu_data_looplist(loopnode_t** head,datatype_t k,datatype_t m) { int i; if (*head==NULL||mnext!=*head) { tail=tail->next; //将指针tail移动至链尾,作为尾节点定位指针。 } pre=tail; //将指针pre指向链尾。 /*此时头指针*head指向首元节点,指针p指向首元节点,指针pre指向链尾节点(指针p的前一位节点),指针tail指在链尾节点*/ for (i=1;inext; //循环结束时,指针p指在节点3,指针pre指在节点2. } printf("从序号%d开始,往后数%d个位置的出列\n",p->data,m); while (p->next!=p) { for (i=1;inext; //循环结束时,指针p指在节点6,指针pre指在节点5。节点6出列(删除) } printf("序号%d出列\n",p->data); pre->next=p->next; if (p==*head) { *head=p->next; //如果出列的是首元节点,则重新更新一下头指针指向新的首元节点 } loopnode_t* temp=p; //设置过度指针temp指向当前指针p所指向的节点,然后释放其内存,指针p继续下一步 p=p->next; free(temp); } printf("链表中最后剩下的节点是%d\n",p->data); *head=p; } void print_data_looplist(loopnode_t** head) { if (NULL==*head) { printf("链表为空!\n"); return; } loopnode_t* p=*head; do{ printf("%d ",p->data); p=p->next; } while (p->next!=*head); printf("\n"); } ** main.c ** #include "looplist1.h" int main() { loopnode_t* head=NULL; int i=0; datatype_t data; for (i=0;i
+112
慕斯卡4428351 的学生作业:
#include "linkstack.h" int get_level(char operator) { switch(operator) { case '+': case '-': return 1; case '*': case '/': return 2; default: printf("%c is invalid\n",operator); return -1; } } int compute(linkstack_t *operand,linkstack_t *operator) { int a = 0,b = 0; char c = 0; int data = 0; b = pop_linkstack(operand); a = pop_linkstack(operand); c = (char)pop_linkstack(operator); switch(c) { case '+': data = a + b; break; case '-': data = a - b; break; case '*': data = a * b; break; case '/': data = a / b; break; default: break; } push_linkstack(operand,data); return data; } int calc_value(char *buf) { int i = 0; int data = 0; char operator_top = 0; int operand_top = 0; linkstack_t *operand = NULL; linkstack_t *operator = NULL; operand = create_empty_linkstack(); operator = create_empty_linkstack(); for(i = 0;buf[i] != '\0';i++) { //calc the int if(buf[i] >= '0' && buf[i] = get_level(buf[i])) { compute(operand,operator); if(!is_empty_linkstack(operator)) operator_top = (char)get_top_data(operator); else break; } push_linkstack(operator,buf[i]); } } while(!is_empty_linkstack(operator)) compute(operand,operator); return pop_linkstack(operand); } int main() { char buf[1024] = "1+123*5"; // char buf[1024] = "4+8*2-3"; int value = 0; value = calc_value(buf); printf("%s = %d\n",buf,value); return 0; }
慕斯卡4428351 的学生作业:
#include #include #include void bubble_sort(unsigned char *p,int len) { int i =0,j = 0; for(i = 0;i < len - 1;i++) { for(j = 0;j < len - i - 1;j++) { if(p[j] > p[j+1]) { p[j] ^= p[j+1]; p[j+1] ^= p[j]; p[j] ^= p[j+1]; } } } return ; } void print_str(unsigned char *p) { printf("%s\n",p); } int main(int argc, const char *argv[]) { unsigned char str[] = "decba"; int str_len = strlen(str); bubble_sort(str,str_len); print_str(str); return 0; }