typedef struct Nameval Nameval;
struct Nameval{
char *name;
int value;
Nameval *next;
};
Nameval *newitem(char *name,int value)
{
Nameval *newp;
newp=(Nameval*)malloc(sizeof(Nameval));
newp->name=name;
newp->value=value;
newp->next=NULL;
return newp;
}
Nameval *addfront(Nameval *listp,Nameval *newp)
{
newp->next=listp;
return newp;
}
Nameval *addend(Nameval *listp,Nameval *newp)
{
Nameval *p;
if(listp==NULL)
return newp;
for(p=listp;p->next!=NULL;p=p->next)
p=p->next;
p->next=newp;
return listp;
}
Nameval *lookup(Nameval *listp,char *name)
{
for(;listp!=NULL;listp=listp->next)
if(strcmp(name,listp->name)==0)
return listp;
return NULL;
}
typedef void(*Fnptr)(Nameval*,void*);
void apply(Nameval *listp,Fnptr fn,void *arg)
{
for(;listp!=NULL;listp=listp->next)
(*fn)(listp,arg);
}
void print(Nameval *p,void *arg)
{
char *fmt;
fmt=(char*)arg;
printf(fmt,p->name,p->value);
}
void inccounter(Nameval *p,void *arg)
{
int *ip;
ip=(int*)arg;
(*ip)++;
}
void freeall(Nameval *listp)
{
Nameval *next;
for(;listp!=NULL;listp=next){
next=listp->next;
free(listp);
}
}
Nameval *delitem(Nameval *listp,char *name)
{
Nameval *p,*prev;
prev=NULL;
for(p=listp;p!=NULL;p=p->next){
if(strcmp(name,p->name)==0){
if(prev==NULL)
listp=p->next;
else
prev->next=p->next;
free(p);
return listp;
}
prev=p;
}
eprintf("delitem:%s not in list",name);
return NULL;
}
list 的c实现
最新推荐文章于 2024-03-24 17:18:00 发布