C语⾔数据结构学⽣成绩顺序表
⼀个简单的顺序表实现⼀组学⽣信息增,删,查,取功能。其中⽂件导⼊部分的处理花费了较多时间代码如下:
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<malloc.h>
#include<errno.h>
#define maxsize 30
#define OVERFLOW -2
#define OK 1
typedef struct{
char name[8];
int  id;
int score;
}student;
typedef struct{
student *elem;
int length ;
}sqlist;
函数⽅法:
初始化
int InitList(sqlist *L)
{
L->elem=(student*)malloc(sizeof(student)*maxsize);
if(!L->elem)exit(OVERFLOW);
L->length=0;
return OK;
}
void Openfile(sqlist *L){
int i=0;
FILE *fp;
fp =fopen("","r");
if((fp=fopen("","r"))==NULL)
{
printf("can't open the file\n");
printf("error:%s\n",strerror(errno));
exit(0);
}
while(!feof(fp))
{
fscanf(fp,"%s%d%d",L->elem[i].name,&L->elem[i].id,&L->elem[i].score);
/*fscanf()格式化读⽂件函数,这个函数以空格或换⾏区分两个不同的数据,如果使
⽤⾃⼰编写的⽂本,⽂本每个元素之间最好保持⼀个空格不要多个空格以免
出现不必要的错误*/
printf("%s%d%d\n",L->elem[i].name,L->elem[i].id,L->elem[i].score);
i++;
L->length++;
}
fclose(fp);
}
插⼊与删除
int InsertList(sqlist *L){
int j,i;
student s;
printf("================输⼊要插⼊的学⽣信息==============\n"); printf("*****姓名:");scanf("%s",s.name);
printf("*****学号:");scanf("%d",&s.id);
printf("*****成绩:");scanf("%d",&s.score);
printf("输⼊完成\n\n");
printf("输⼊要插⼊的位置信息:");
scanf("%d",&i);
if((i<1)||(i>L->length+1))return0;
if(L->length==maxsize)return0;
for(j=L->length-1;j>=i-1;j--){
L->elem[j+1]=L->elem[j];
}
L->elem[i-1]=s;
L->length++;
}
int DeleteList(sqlist *L){
int j,i;
printf("输⼊要删除位置");
scanf("%d",&i);
if((i<1)||(i>L->length+1))return0;
for(j=i-1;j<L->length-1;j++){
L->elem[j]=L->elem[j+1];
}
L->length--;c语言listinsert函数
return OK;
}
查取值
int LocateElem(sqlist *L){
int k,i=0;
printf("输⼊要查的学号\n");
scanf("%d",&k);
for(i=0;i<L->length;i++){
if(L->elem[i].id==k)printf("该⽣的成绩为:%d\n",L->elem[i].score);
}
return0;
}
int GetElement(sqlist *L){
int i;
student e;
printf("输⼊取值位置信息\n");scanf("%d",&i);
if((i<1)||(i>L->length+1))return0;
e=L->elem[i-1];
printf("********该学⽣的信息********\n");
printf("姓名: %s\n",e.name);
printf("学号: %d\n",e.id);
printf("成绩: %d\n",e.score);
return OK;
}
打印
void printList(sqlist *L){
int i=0;
printf("====================学⽣成绩表==================\n"); for(i=0;i<L->length;i++){
printf("姓名:%s\n",L->elem[i].name);
printf("学号:%d\n",L->elem[i].id);
printf("成绩:%d\n\n",L->elem[i].score);
}
printf("\n");
}
主函数:
int main(){
sqlist L;
InitList(&L);/*初始化*/
Openfile(&L);/*导⼊⽂件*/
printList(&L);
InsertList(&L);/*增,删,查,取*/
printList(&L);
DeleteList(&L);
printList(&L);
LocateElem(&L);
GetElement(&L);
return0;
}

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。