
作业社区
探索学习新天地,共享知识资源!
沫颖 的学生作业:
在计算机系统中,理解进程地址空间中虚拟地址与物理地址至关重要。 虚拟地址是由操作系统为每个进程分配的地址空间,它使得每个进程都认为自己拥有独立的、连续的内存空间。虚拟地址的存在提高了系统的安全性和多任务处理能力,不同进程的虚拟地址可以相同,但不会相互干扰。 物理地址则是实际的内存地址,对应着计算机硬件中的真实存储单元。操作系统通过内存管理单元(MMU)将进程的虚拟地址转换为物理地址,这个转换过程对进程是透明的。 这种虚拟地址和物理地址的分离机制,使得进程可以在不了解实际硬件细节的情况下进行内存访问,同时也方便了操作系统对内存资源的管理和分配,提高了内存的利用率和系统的稳定性。





大禹123 的学生作业:
1、seqstack.h #ifndef __SEQSTACK_H__ #define __SEQSTACK_H__ #include #include #include #define MAX 12 typedef char datatype_t; typedef struct { datatype_t buf[MAX]; //数组存储元素 int top; //栈顶记录数组最后一个元素的下标 }seqstack_t; //1、创建空的顺序栈——为结构体在内存分配空间 extern seqstack_t *create_empty_seqstack(); // 2、入栈 先移动top,再存放数据 extern void push_seqstack(seqstack_t *s, datatype_t data); // 3、出栈 先取数据,再移动top extern datatype_t pop_seqstack(seqstack_t *s); // 4、判断是否为空栈 extern int is_empty_seqstack(seqstack_t *s); // 5、判断是否为满栈 extern int is_full_seqstack(seqstack_t *s); //6、获得栈顶元素的值 extern datatype_t get_top_seqstack(seqstack_t *s); #endif 2、seqstack.c #include "seqstack.h" //1、创建空的顺序栈——为结构体在内存分配空间 seqstack_t *create_empty_seqstack() { seqstack_t *s = NULL; s = (seqstack_t *)malloc(sizeof(seqstack_t)); if(NULL==s){ printf("malloc is failede\n"); return NULL; } memset(s,0,sizeof(seqstack_t)); s->top = -1; return s; } // 2、入栈 先移动top,再存放数据 void push_seqstack(seqstack_t *s, datatype_t data) { s->buf[++s->top] = data; return; } // 3、出栈 先取数据,再移动top datatype_t pop_seqstack(seqstack_t *s) { return s->buf[s->top--]; } // 4、判断是否为空栈 int is_empty_seqstack(seqstack_t *s) { return s->top == -1?1:0; } // 5、判断是否为满栈 int is_full_seqstack(seqstack_t *s) { return s->top == (MAX - 1)?1:0; } //6、获得栈顶元素的值 datatype_t get_top_seqstack(seqstack_t *s) { return s->buf[s->top]; } 3、seqstack.c #include "seqstack.h" int main() { char a[12] = {'a','n','i','h','c',' ','e','v','o','l',' ','I'}; int i=0,ret = 0; seqstack_t *s = NULL; s = create_empty_seqstack(); printf("进栈序列为:\n"); while(!is_full_seqstack(s)){ char temp = a[i++]; push_seqstack(s,temp); printf("%c ",temp); } printf("\n"); printf("出栈序列为:\n"); while(!is_empty_seqstack(s)){ printf("%c ",pop_seqstack(s)); } printf("\n"); return 0; }





大禹123 的学生作业:
1、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 2、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"); } 3、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; }




