要求实现功能:
1.头插学生
2.尾插学生
3.任意位置插入学生
4.输出所有学生
5.任意位置删除学生
6.按位置查找学生
7.修改学生
link.h部分
#ifndef LINK_H_ #define LINK_H_ #include <myhead.h> typedef struct { int id; char name[20]; int age; }Stu,*Pstu; typedef struct listNode { int len; Stu s; struct listNode *next; }Link,*Plink; Plink create_link(); int input_stu_front(Plink); int output_all_stu(Plink); int input_stu_rear(Plink); int input_stu_anypos(Plink); int delete_stu(Plink); int find_stu(Plink); int change_stu(Plink); #endif
link.c部分
#include "Link.h" Plink create_link() { Plink p=malloc(sizeof(Link)); if(NULL==p) { printf("创建失败\n"); return NULL; } printf("创建成功\n"); p->len=0; p->next=NULL; return p; } int input_stu_front(Plink L) { if(NULL==L) { printf("单链表不存在\n"); return -1; } Plink p=create_link(); printf("请输入学生学号:"); scanf("%d",&p->s.id); printf("请输入学生姓名:"); scanf("%s",p->s.name); printf("请输入学生年龄:"); scanf("%d",&p->s.age); p->next=L->next; L->next=p; L->len++; return -1; } int input_stu_rear(Plink L) { if(NULL==L) { printf("单链表不存在\n"); return -1; } Plink p=create_link(); printf("请输入学生学号:"); scanf("%d",&p->s.id); printf("请输入学生姓名:"); scanf("%s",p->s.name); printf("请输入学生年龄:"); scanf("%d",&p->s.age); Plink t=L; for(int i=0;i<L->len;i++) { t=t->next; } t->next=p; p->next=NULL; L->len++; return 0; } int input_stu_anypos(Plink L) { int pos; printf("请输入要插入的位置:"); scanf("%d",&pos); if(pos<1||pos>L->len+1||NULL==L) { printf("插入失败\n"); return -1; } Plink p=create_link(); printf("请输入学生学号:"); scanf("%d",&p->s.id); printf("请输入学生姓名:"); scanf("%s",p->s.name); printf("请输入学生年龄:"); scanf("%d",&p->s.age); Plink t=L; for(int i=0;i<pos-1;i++) { t=t->next; } p->next=t->next; t->next=p; L->len++; return 0; } int output_all_stu(Plink L) { if(NULL==L) { printf("单链表不存在\n"); return -1; } Plink t=L; for(int i=0;i<L->len;i++) { t=t->next; printf("学号:%d 姓名:%s 年龄:%d\n",t->s.id,t->s.name,t->s.age); } return 0; } int delete_stu(Plink L) { int pos; printf("请输入要删除的位置:"); scanf("%d",&pos); if(NULL==L||pos<1||pos>L->len+1) { printf("单链表不存在\n"); return -1; } Plink t=L; for(int i=0;i<pos-1;i++) { t=t->next; } Plink Q=t->next; t->next=t->next->next; L->len--; printf("删除成功\n"); free(Q); Q=NULL; return 0; } int find_stu(Plink L) { int pos; printf("请输入需要查找的位置:"); scanf("%d",&pos); if(pos<1||pos>L->len||NULL==L) { printf("查找失败\n"); return -1; } Plink t=L; for(int i=0;i<pos;i++) { t=t->next; } printf("学号:%d 姓名:%s 年龄:%d\n",t->s.id,t->s.name,t->s.age); return 0; } int change_stu(Plink L) { int pos; printf("请输入需要修改的位置:"); scanf("%d",&pos); if(pos<1||pos>L->len||NULL==L) { printf("查找失败\n"); return -1; } Plink t=L; for(int i=0;i<pos;i++) { t=t->next; } printf("请修改学生学号:"); scanf("%d",&t->s.id); printf("请修改学生姓名:"); scanf("%s",t->s.name); printf("请修改学生年龄:"); scanf("%d",&t->s.age); return 0; }
main.c部分
#include "Link.h" int main(int argc, const char *argv[]) { Plink L=create_link();//创建头链表 int order; while(1) { printf("\t\t学生管理系统\n"); printf("\t\t1.输入学生信息,头插法\n"); printf("\t\t2.输入学生信息,尾差法\n"); printf("\t\t3.任意位置插入一位学生信息\n"); printf("\t\t4.输出所有学生信息\n"); printf("\t\t5.任意位置删除一位学生信息\n"); printf("\t\t6.查找学生信息\n"); printf("\t\t7.修改学生信息\n"); printf("\t\t8.退出系统\n"); printf("\t\t请输入您要执行的操作:"); scanf("%d",&order); switch(order) { case 1: input_stu_front(L); break; case 2: input_stu_rear(L); break; case 3: input_stu_anypos(L); break; case 4: output_all_stu(L); break; case 5: delete_stu(L); break; case 6: find_stu(L); break; case 7: change_stu(L); break; case 8: return 0; default: return 0; } } return 0; }