#include <stdio.h>
#include <string.h>
#include <stdlib.h>
struct node
{
int data;
char name[100];
char valu[100];
struct node *next;
};
struct node * creat ( int n , char *argv ) //创建链表
{
struct node *head, *p, *q;
int i=0 ,t;
char *pp , *qq , str[100];
head = (struct node *)malloc(sizeof(struct node)); //
p = head;
FILE *fp;
fp = fopen( argv , "r");
/*while( fscanf(fp , "%d" , &t) != EOF )
{
if( (q = ( struct node * )malloc(sizeof(struct node))) == NULL )
{
printf("error!");
}
else
{
q->data = t;
//strcpy( q->name , "hello" );
p->next = q;
p = q;
}
}*/
while( !feof(fp) )
{
fgets(str , 100 , fp );
pp = strchr( str , '=' );
qq = pp + 1;
*pp = '\0';
pp = NULL;
if(pp = strchr( qq , '#' ))
{
*pp = '\0';
}
if( (q = ( struct node * )malloc(sizeof(struct node))) == NULL )
{
printf("error!");
}
else
{
strcpy( q->name , delblank(str) );
strcpy( q->valu , delblank(qq) );
p->next = q;
p = q;
}
}
p->next = NULL;
head = head->next;
return(head);
fclose(fp);
}
void output(struct node *head) //输出链表
{
struct node *p;
// p = head->next;
p = head;
while( p )
{
printf("%s=%s\n" , p->name , p->valu);
p=p->next;
}
}
struct node *search( struct node *head , int f , int a ) //查找当前结点
{
struct node *p , *q;
q = (struct node *)malloc(sizeof(struct node));
p = head;
q->next = p;
while( p != NULL )
{
if( f == p->data )
{
if( 1 == a )
return(p);
else if( 2 == a )
return (q);
}
else
{
p = p->next;
q = q->next;
}
}
return NULL; //找不到就返回空
}
struct node * insert( struct node *head ) //插入
{
int sequence_number;
struct node *pnew , *p , *end;
p = head;
pnew = (struct node *)malloc(sizeof(struct node));
printf("在哪插:\n");
scanf( "%d" , &sequence_number );
if( (p = search( head , sequence_number , 1 )) == NULL )
{
printf("没有此项!\n");
return NULL;
}
else
{
pnew->data = 201601359;
pnew->next = p->next;
p->next = pnew;
// printf("修改后的链表:\n");
return(head);
}
}
struct node * del( struct node * head ) //删除结点
{
int sequence_number;
struct node *frontdel , *del , *behinddel , *end;
del = head;
printf("输入要删除的序号:\n");
scanf("%d" , &sequence_number);
if( ( del = search( head , sequence_number , 1 )) == NULL )
{
printf("没有此项!\n");
return NULL;
}
else
{
del = search( head , sequence_number , 1 );
frontdel = search( head , sequence_number , 2 );
behinddel = del->next;
if( head == del )
{
del = head->next;
head = del;
// printf("删除后的链表:\n");
return(head);
}
else if( del->data == sequence_number )
{
frontdel->next = behinddel;
printf("删除后的链表:\n");
return (head);
}
}
}
char * delblank( char *str )
{
char *p ,*q;
int len = 0;
len = strlen(str);
p = str;
if( *str == ' ')
{
while( *p == ' ' )
{
p++;
}
}
q = str + len - 1;
while( *q == ' ' )
{
q--;
}
*(q + 1) = '\0';
return p;
}
int main( int argc , char * argv[] ) //主函数
{
int number=5 , i=0;
struct node *head, *searchp, *searchp2, *q;
head = creat(number , argv[1] );
printf("原链表:\n");
output(head);
printf("\n\n");
// searchp = search( head , 201601322 , 1 );
// head = insert( head );
// head = del( head );
// output(head);
}