关于文件与链表的操作

     // 这个文件含有2000多个英文单词(没有顺序),   
// 要求就是用链表存储下来然后按照字典的顺序排序. 
// 然后当你输入一个或者几个单词的时候,  
// 系统应该知道你建立的链表字典里有没有这个单词?   
#include < stdio.h >
#include
< malloc.h >
#include 
< stdlib.h >  
#include
< string .h >
#include
< iostream.h >
#define  LEN 20
typedef 
struct  lone {
    
char a[20];
    
struct lone *next;
}
node;
node 
* read(node  * head, int   * n)
{
     node 
*p1,*p2,*p3;
     
int m=0;     
     FILE 
*fp;
     
if((fp=fopen("a.txt","r"))==NULL)
     
{     
         printf(
"can not open the file ");
         exit(
0); 
     }

     
do
     
{
         p1
=(node *)malloc(sizeof(node));
         fscanf(fp,
"%s",&p1->a);
         
if(m==0)      
         
{
             p2
=p1;
             head
=p1;
         }

         
else
         
{
             p2
->next=p1;
         }

         p2
=p1;
         m
++
     }
while(!feof(fp));
     
*n=m;
     p2
->next=NULL;
     fclose(fp);
return head;
}

void  sort(node  * head, int  n)
{
    
int i,j;
    node 
*ptr1,*ptr2,*temp,*ptr3;    
    ptr3
=head;
    
while(ptr3!=NULL)
    
{
        ptr1
=head;
        ptr2
=head->next;
        ptr3
=ptr3->next;
        
while(ptr2!=NULL)
        
{
            
if(strcmp(ptr1->a,ptr2->a)>0)
            
{    
                temp
=(node *)malloc(sizeof(node));
                strcpy(temp
->a,ptr2->a);
                strcpy(ptr2
->a,ptr1->a);
                strcpy(ptr1
->a,temp->a);
            }

        ptr1
=ptr2;
        ptr2
=ptr2->next;    
        }

        
    }

}

void  search(node  * head)
{
    
int i=0,m=0,j;
    
char *b[LEN]={"what","is","you","name"};//LEN你可以自己定义,我这定义的最多是20个单词的,要输入语句的单词就在这里面改
    while(b[i++]!=NULL)                   //example:*b[LEN]={"I","like","this","GAME","WHAT","you","like"};   
    {
        m
++;
    }

    node 
*p;
    p
=(node *)malloc(sizeof(node));
    
for(i=0; i<m; i++)
    
{     p=head;     
        
while( p!=NULL && strcmpi(p->a,b[i])!=0)
        
{               
            p
=p->next;
        }

        
if(p!=0)
        
{
            printf(
"find p->a: %s ",p->a);
        }

        
if(!p)
        
{
            printf(
"error,this word [%s] was not find ",b[i]);                
        }
  
    }

    p
=NULL;
}

void  main()
{
    node 
*head,*p3;
    
int n;
    head
=read(head,&n);
    printf(
"n=%d",n);
    p3
=head;
     
while(p3!=NULL)
     
{
        printf(
"this num:%s ",p3->a); 
        p3
=p3->next;
     }

    sort(head,n);
    p3
=head;
    printf(
" ");
    
while(p3!=NULL)
    
{
        printf(
"this num:%s ",p3->a); 
        p3
=p3->next;
    }

    search(head);
}


 
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值