【数据结构】链表 - 学生成绩
“Sqlist.h”
#ifndef LINKLIST_H_INCLUDED #define LINKLIST_H_INCLUDED #include <stdio.h> #include <stdlib.h> #define TRUE 1 #define FALSE 0 typedef struct student{ char number[10]; char name[10]; int Score; }Student; typedef struct NODE{ struct NODE *next; Student data; }Node,*Linklist; int Linklist_init(Linklist *L); void Linklist_input(Linklist *L); void print_Linklist(Linklist L); int Linklist_length(Linklist L); void Linklist_go_die(Linklist *L); void Linklist_free(Linklist L,int Number); void Linklist_insert(Linklist *L,int Number); int Linklist_find(Linklist L,int input); void Linklist_get(Linklist L,int i,Linklist *s) ; #endif // LINKLIST_H_INCLUDED
"Sqlist.c"
#include "Linklist.h" int Linklist_init(Linklist *L) { (*L) = (Linklist)malloc(sizeof(Node)); if(!(*L)) { printf("分配失败"); return FALSE; } (*L)->next = NULL; return TRUE; } void Linklist_input(Linklist *L) { int length = 0; Linklist s; Linklist q = *L; printf("你要添加几个数据:"); while(length <=0) { scanf("%d",&length); } printf("\n"); while(q->next) { q = q ->next; } while(length > 0) { fflush(stdin); s = (Linklist)malloc(sizeof(Node)); printf("请输入学号:"); scanf("%s",s->data.number); printf("请输入姓名:"); scanf("%s",s->data.name); printf("请输入成绩:"); scanf("%d",&(s->data.Score)); s->next = NULL; q->next = s; q = q -> next; length--; } } void Linklist_insert(Linklist *L,int Number) { Linklist q = *L; Linklist s; Linklist t; if(Number <= 0) { printf("数据异常"); return; } s = (Linklist)malloc(sizeof(Node)); printf("请输入学号:"); scanf("%s",s->data.number); printf("请输入姓名:"); scanf("%s",s->data.name); printf("请输入成绩:"); scanf("%d",&(s->data.Score)); s->next = NULL; while(q&&Number) { t = q; Number--; q = q->next; } if(Number>0) { printf("异常\n"); return; } else { t->next = s; s->next = q; } } void print_Linklist(Linklist L) { printf("List:\n"); printf("%6s %6s %6s\n","学号","姓名","成绩"); while(L->next) { L = L->next; printf("|%6s|%6s|%3s%3d|\n",L->data.number,L->data.name," ",L->data.Score); } printf("\n"); } int Linklist_search(Linklist L,int data) { L = L->next; while(L) { if(data == L->data.Score) { return TRUE; } L=L->next; } return FALSE; } void Linklist_get(Linklist L,int i,Linklist *s) //获取第i个元素的信息 打印出来 { if(i<0) { printf("数据异常"); return; } while(L->next&&i) { L = L->next; i--; } if(i>0) { printf("数据异常"); return; } *s = L; } int Linklist_find(Linklist L,int input) { int i=0; while(L) { i++; L = L->next; if(input == L->data.Score) { return i; } } return -1; } int Linklist_length(Linklist L) { int length = 0; while(L->next) { L = L->next; length ++; } return length; } void Linklist_go_die(Linklist *L) { Linklist p; while(*L) { p = *L; (*L) = (*L)->next; free(p); } } void Linklist_free(Linklist L,int Number) { Linklist Aid; if(Number <= 0) { printf("数据异常"); return; } while(L&&Number) { Aid = L; Number--; L = L->next; } if(Number>0) { printf("异常\n"); return; } else { Aid->next = L->next; free(L); } }
"main.c"
#include <stdio.h> #include <stdlib.h> #include "Linklist.h" int main() { Linklist L; Linklist s; int rec; int input = 0; system("color 3e"); Linklist_init(&L); Linklist_input(&L); print_Linklist(L); while(1) { printf("\n\n【输入操作】\n1.获取i元素\t2.查询\t3.添加\t4.插入\t5.删除\t6.求长度\t7.显示全部\t8.销毁退出\n:"); scanf("%d",&rec); switch(rec){ case 1: printf("你要查找第几个元素:"); scanf("%d",&input); Linklist_get(L,input,&s); if(s!=NULL)printf("学号:%4s姓名:%4s成绩:%4d",s->data.number,s->data.name,s->data.Score); break; case 2: printf("请输入你要查询的成绩:"); scanf("%d",&input); input = Linklist_find(L,input); if(input!=-1) { printf("找到第%d个\n",input); Linklist_get(L,input,&s); printf("学号:%4s姓名:%4s成绩:%4d",s->data.number,s->data.name,s->data.Score); } else {printf("没发现匹配项");} break; case 3: Linklist_input(&L); break; case 4: printf("你要插入在哪个位置?:"); scanf("%d",&input); Linklist_insert(&L,input); break; case 5: printf("你要删除第几个元素?:"); scanf("%d",&input); Linklist_free(L,input); break; case 6: printf("【表长为:%d】",Linklist_length(L)); break; case 7: print_Linklist(L); break; case 8: Linklist_go_die(&L); exit(0); default: break; } } return 0; }