Tag:学生成绩管理系统

Tag (学生成绩管理系统)'s result:

LinkedList

链表的结点中有指针域,这里先写最初级的链表(后续会有链表的进化型和究极进化型) 几个关键点: 1.头指针 2.插入和删除操作的指针修改 3.插入和删除操作的各种情况分析(具体的看注释) 4.记录指针 下面以一个学生成绩管理程序为例: #include <stdio.h> #include <malloc.h> #define NULL 0 struct student { int num; //学号 double score; //分数 struct student *next; //指向下一个学生 }; int main() { struct student *del(struct student *head,int num); //删除声明 struct student *ins(struct student *head,struct student *stu); //插入声明 int n = 0; int dnum; struct student *head,*p,*p1,*p2,*p3,stu; head = NULL; //先让头结点指针为空 p1 = (struct student*)malloc(sizeof(struct student)); //开辟空间 scanf(“%d%lf”,&p1->num,&p1->score); do { n = n+1; if (n==1)head = p1; //若是第一个结点,就给head else p2->next = p1; //非第一个结点,就给p2的下一个结点 p2 = p1; //把p1先给p2 p1 = (struct student*)malloc(sizeof(struct student)); //p1再新开一个内存区 scanf(“%d%lf”,&p1->num,&p1->score); } while (p1->num!=0); //号数输入为0就结束了 p2->next = NULL; //最后一个结点的next指向null没了 p = head; //创建链表完毕————————————– while (p!=NULL) { printf(“%d\t%lf\n”,p->num,p->score); p = p->next; //指针后移输出结点信息 } printf(“请输入需要删除的学号:”); scanf(“%d”,&dnum); p = del(head,dnum); //返回删除后的头结点,删除完毕—————————— p3 = p; //记录删除后的链表! while (p!=NULL) { printf(“%d\t%lf\n”,p->num,p->score); p = p->next; } printf(“请输入需要增添的学号及其数据”); scanf(“%d%lf”,&stu.num,&stu.score); p = ins(p3,&stu); //返回插入后的头结点,插入完毕——————————- while (p!=NULL) { printf(“%d\t%lf\n”,p->num,p->score); p = p->next; } return 0; } struct student *del(struct student *head,int num) //传头结点与要删除的号数进来 { struct student *p1,*p2; if (head==NULL) { printf(“NO\n”); } p1 = head; while (num!=p1->num&&p1->next!=NULL) //要删除的号数不是第一个并且没到或等于最后一个……