首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

关于链表的有关问题

2012-03-24 
关于链表的问题表示实在是做不下去,基础不行啊。。。。尝试用链表做结果改成四不像。。。。用没有那位大神耐心的改

关于链表的问题
表示实在是做不下去,基础不行啊。。。。尝试用链表做 结果改成四不像。。。。用没有那位大神耐心的改一下啊 准备之后好好复习了
#include <stdio.h> 
#include <string.h>
#include <stdlib.h>
#include <malloc.h>
#define SWN 4 /* ¿Î³ÌÊý */ 
#define NAMELEN 20 /* ÐÕÃû×î´ó×Ö·ûÊý */ 
#define CODELEN 10 /* ѧºÅ×î´ó×Ö·ûÊý */ 
#define FNAMELEN 80 /* ÎļþÃû×î´ó×Ö·ûÊý */ 
#define BUFLEN 80 /* »º³åÇø×î´ó×Ö·ûÊý */ 
/* ¿Î³ÌÃû³Æ±í */ 
char schoolwork[SWN][NAMELEN+1] = {"Chinese","Mathematic","English","physics"}; 
struct record 

int age;
char sex;
char name[NAMELEN+1];
char code[CODELEN+1]; 
int marks[SWN]; 
int total; 
}stu; 

struct node 

int age;
char sex;char name[NAMELEN+1];
char code[CODELEN+1]; 
int marks[SWN];//ÀûÓÃÕûÐÎÊý×é±£´æ¸÷¿ÆÄ¿³É¼¨ 
int total; 
struct node *next; /* ºóÐø±íÔªÖ¸Õë */ 
}*head; /* Á´±íÊ×Ö¸Õë */ 

int total[SWN]; 
FILE *stfpt; 
char stuf[FNAMELEN];
/* ´ÓÖ¸¶¨Îļþ¶ÁÈëÒ»¸ö¼Ç¼ */ 
int readrecord(FILE *fpt,struct record *rpt) 

char buf[BUFLEN]; 
int i; 
if(fscanf(fpt,"%s",buf)!=1) 
return 0; /* Îļþ½áÊø */ 
strncpy(rpt->name,buf,NAMELEN); 
fscanf(fpt,"%s",buf); 
strncpy(rpt->code,buf,CODELEN); 
for(i=0;i<SWN;i++) 
fscanf(fpt,"%d",&rpt->marks[i]); 
for(rpt->total=0,i=0;i<SWN;i++) 
rpt->total+=rpt->marks[i]; 
return 1; 



/* ¶ÔÖ¸¶¨ÎļþдÈëÒ»¸ö¼Ç¼ */ 
int writerecord(FILE *fpt,struct record *rpt) 

int i; 
fprintf(fpt,"%s\n",rpt->name); 
fprintf(fpt,"%s\n",rpt->code); 
for(i=0;i<SWN;i++) 
fprintf(fpt,"%d\n",rpt->marks[i]); 
return 0; 


/* ÏÔʾѧÉú¼Ç¼ */ 
void display(struct record *rpt) 

int i; 
printf("\nName : %s\n",rpt->name); 
printf("Code : %s\n",rpt->code); 
printf("Marks :\n"); 
for(i=0;i<SWN;i++) 
printf(" %-15s : %4d\n",schoolwork[i],rpt->marks[i]); 
printf("Total : %4d\n",rpt->total); 


/* ¼ÆËã¸÷µ¥¿Æ×Ü·Ö */ 
int totalmark(char *fname) 

FILE *fp; 
struct record s; 
int count,i; 
if((fp=fopen(fname,"r"))==NULL) 

printf("Can't open file %s.\n",fname); 
return 0; 

for(i=0;i<SWN;i++) //ÖÃÁã
total[i]=0; 
count=0; 



 
for(i=0;i<SWN;i++) 
total[i]+=s.marks[i]; 
count++;  
fclose(fp); 
return count; /* ·µ»Ø¼Ç¼Êý */ 


/* ÁбíÏÔʾѧÉúÐÅÏ¢ */ 
void output(char *fname) 

FILE *fp; 
struct record s; 
if((fp=fopen(fname,"r"))==NULL) 

printf("Can't open file %s.\n",fname); 
return ; 

while(readrecord(fp,&s)!=0) 

display(&s); 
printf("\n Press ENTER to continue...\n"); 
while(getchar()!='\n'); 

fclose(fp); 
return; 


/* ¹¹ÔìÁ´±í */ 
struct node *makelist(char *fname) 

FILE *fp; 
struct record s; 
struct node *p,*u,*v,*h; 
int i; 
if((fp=fopen(fname,"r"))==NULL) 

printf("Can't open file %s.\n",fname); 
return NULL; 

h=NULL; 
p=(struct node *)malloc(sizeof(struct node)); 
while(readrecord(fp,(struct record *)p)!=0) 

v=h; 
while(v&&p->total<=v->total) 

u=v; 
v=v->next; 

if(v==h) 
h=p; 
else 
u->next=p; 
p->next=v; 
p=(struct node *)malloc(sizeof(struct node)); 

free(p); 
fclose(fp); 
return h; 


/* ˳ÐòÏÔʾÁ´±í¸÷±íÔª */ 
void displaylist(struct node *h) 

while(h!=NULL) 

display((struct record *)h); 
printf("\n Press ENTER to continue...\n"); 
while(getchar()!='\n'); 
h=h->next; 

return; 


//°´Ñ§ÉúÐÕÃûɾ³ý¡£¡£

int deletename(char *fname, char *key,struct record *rpt) 

FILE *fp; 
int c; 
struct record s; 
if((fp=fopen(fname,"r"))==NULL) 

printf("Can't open file %s.\n",fname); 
return 0; 

c=0; 
while(readrecord(fp,&s)!=0) 

if(strcmp(s.name,key)==0) 


 
*(head)=*(head+1);


c++; 


fclose(fp); 
if(c==0) 
printf("The student %s is not in the file %s.\n",key,fname); 
return 1; 




/* °´Ñ§ÉúѧºÅɾ³ýѧÉú¼Ç¼ */ 
int deletenum(char *fname, char *key,struct record *rpt) 

FILE *fp; 
int c; 
struct record s; 
if((fp=fopen(fname,"r"))==NULL) 

printf("Can't open file %s.\n",fname); 
return 0; 

c=0; 
while(readrecord(fp,&s)!=0) 

if(strcmp(s.code,key)==0) 

free(&s); 
c++; 
break; 


fclose(fp); 
if(c==0) 
printf("The student %s is not in the file %s.\n",key,fname); 
return 1; 


















/* °´Ñ§ÉúÐÕÃû²éÕÒѧÉú¼Ç¼ */ 
int findname(char *fname, char *key) 

FILE *fp; 
int c; 
struct record s; 
if((fp=fopen(fname,"r"))==NULL) 

printf("Can't open file %s.\n",fname); 
return 0; 

c=0; 
while(readrecord(fp,&s)!=0) 

if(strcmp(s.name,key)==0) 

display(&s); 
c++; 


fclose(fp); 
if(c==0) 
printf("The student %s is not in the file %s.\n",key,fname); 
return 1; 


/* °´Ñ§ÉúѧºÅ²éÕÒѧÉú¼Ç¼ */ 
int findno(char *fname, char *key) 

FILE *fp; 
int c; 
struct record s; 
if((fp=fopen(fname,"r"))==NULL) 

printf("Can't open file %s.\n",fname); 
return 0; 

c=0; 
while(readrecord(fp,&s)!=0) 

if(strcmp(s.code,key)==0) 

display(&s); 
c++; 
break; 


fclose(fp); 
if(c==0) 
printf("The student %s is not in the file %s.\n",key,fname); 
return 1; 


main() 

int i,j,n; 
char c; 
char buf[BUFLEN]; 
FILE *fp; 
struct record s; 
printf("ÇëÊäÈëÎļþÃû: "); 
scanf("%s",stuf); 
if((fp=fopen(stuf,"r"))==NULL) 

printf("The file %s doesn't exit, do you want to creat it? (Y/N) ",stuf); 
getchar(); 
c=getchar(); 
if(c=='Y'||c=='y') 

fp=fopen(stuf,"w"); 
printf("ÇëÊäÈëÄãÏë¼Ç¼µÄѧÉúÈËÊý: "); 
scanf("%d",&n); 
for(i=0;i<n;i++) 

printf("ÐÕÃû: "); 
scanf("%s",&s.name); 
printf("ѧºÅ: "); 
scanf("%s",&s.code); 
for(j=0;j<SWN;j++) 

printf("ÊäÈë %s ³É¼¨: ",schoolwork[j]); 
scanf("%d",&s.marks[j]); 

writerecord(fp,&s); 

fclose(fp); 


fclose(fp); 
getchar(); 

puts("Now you can input a command to manage the records."); 
puts("dna : delete record by student's name."); 
puts("dnu : delete record by student's number."); 
puts("n : search record by student's name."); 
puts("c : search record by student's code."); 
puts("l : list all the records."); 
puts("s : sort and list the records by the total."); 
puts("q : quit!"); 
while(1) 

puts("Please input command:"); 
scanf(" %c",&c); /* ÊäÈëÑ¡ÔñÃüÁî */ 
if(c=='q'||c=='Q') 

puts("\n Thank you for your using."); 
break; /* q£¬½áÊø³ÌÐòÔËÐÐ */ 


switch(c) 

case 'a':
case 'A':
printf("Please input the student's name you want to delete: "); 
scanf("%s",buf); 
deletename(stuf,buf,&s);
break;


case 'B':
case 'b':
printf("Please input the student's name you want to delete: "); 
scanf("%s",buf); 
deletenum(stuf,buf,&s);
break;
case 'n': /* °´Ñ§ÉúµÄÐÕÃûѰÕҼǼ */ 
case 'N': 
printf("Please input the student's name you want to search: "); 
scanf("%s",buf); 
findname(stuf,buf); 
break; 
case 'c': /* °´Ñ§ÉúµÄѧºÅѰÕҼǼ */ 
case 'C': 
printf("Please input the student's code you want to search: "); 
scanf("%s",buf); 
findno(stuf,buf); 
break; 
case 'l': /* ÁгöËùÓÐѧÉú¼Ç¼ */ 
case 'L': 
output(stuf); 
break; 
case 's': /* °´×ִܷӸߵ½µÍÅÅÁÐÏÔʾ */ 
case 'S': 
if((head=makelist(stuf))!=NULL) 
displaylist(head); 
break; 
default: break; 


return 0;
}

[解决办法]
都是啥东东啊,这么多代码,谁有心情看啊。你还不如发个主题,把需求写下。让有人做过的,给你份代码算了。这样贴代码,哪有时间帮你debug。
[解决办法]
本来想帮你调试下的,结果你的代码里有UNICODE,复制下来后都是乱码,一下子没有了心情。
[解决办法]
网上那么多链表的例子,你随便找一个自己研究研究
http://blog.csdn.net/bdmh/article/details/6112631

热点排行