#include<stdio.h>
#include<stdlib.h>
typedef struct{
int num;
float prize;
}Elemtype;
typedef struct nodelist{
Elemtype data;
struct nodelist *font;
struct nodelist *next;
}List,*Nlist;
Nlist Initlist(){
Nlist headnode=(Nlist)malloc(sizeof(List));
headnode->font=NULL;
headnode->next=NULL;
return headnode;
}
Nlist Createnode(int num,float prz){
Nlist new=Initlist();
new->data.num=num;
new->data.prize=prz;
return new;
}
int Lengthlist(Nlist L){
int i=0;
Nlist p=L->next;
while(p){
i++;
p=p->next;
}
return i;
}
void Printlist(Nlist L){
Nlist p=L->next;
int i=0;
while(p){
i++;
printf("\t%d-%f\t",p->data.num,p->data.prize);
p=p->next;
}
printf(" %dnodes has printed\n",i);
}
void Destroylist(Nlist L){
Nlist p=L;
while(L){
p=L;
L=L->next;
free(p);
}
}
void Clearlist(Nlist L){
Nlist p=L->next;
while(p){
p=p->next;
free(p->font);
}
L->next=NULL;
}
Nlist GetElembyi(Nlist L,int i){
Nlist p=L->next;
int j=1;
while(p&&j<i){
p=p->next;
j++;
} // j p同步走所以j=1 p=L->next<=>j=0 p=L
if(!p||j>i) return NULL;
return p;
}
Nlist GetElembynum(Nlist L,int num){
Nlist p=L->next;
while(p){
if(p->data.num==num)
return p;
p=p->next;
}
printf("Didn't found it\n");
return NULL;
}
int Insertnodebyi(Nlist L,int i,int num,float prz){
Nlist p=L; //p=L,是因为可以在头结点之后插入,所以要从头结点开始出发
int j=0;
Nlist e=Createnode(num,prz);
while(p&&j<i){
p=p->next;
j++;
}
if(!p||j>i) return -1;
p->font->next=e;
e->font=p->font;
e->next=p;
p->font=e;
return 0;
}
int Deletenodebyi(Nlist L,int i){//如果p->next=null,则p->next->font不存在!!!
Nlist p=L;
Nlist q;
int j=0;
while(p&&j<i){
p=p->next;
j++;
}
if(!p||j>i) {
printf("Didn't Fount it");
return -1;
}
q=p->font;
q->next=p->next;
while(p->next) p->next->font=q;
free(p);printf("Done\n");
return 0;
}
void Toucha(Nlist L,int num,float prz){
Nlist e=Createnode(num,prz);
e->font=L; //注意!!!想清楚不要乱
e->next=L->next;
L->next=e;
}
void Weicha(Nlist L,int num,float prz){
Nlist e=Createnode(num,prz);
while(L->next) //尾插不能用p=lnext因为空指针lnextnext不存在!
L=L->next;
e->font=L;
L->next=e;
}
int main(){
Nlist L=Initlist();
Toucha(L,1,1.1);
Toucha(L,11,11.1);
Weicha(L,9,9.9);
Weicha(L,99,99.9);
Printlist(L);
//~ Insertnodebyi(L,4,62,62.6);
//~ Insertnodebyi(L,3,662,2.6);
//~ Printlist(L);
int a=Lengthlist(L);
printf("%dnode\n",a);
//~ Deletenodebyi(L,2);
Printlist(L);
int b=Lengthlist(L);
printf("%dnode\n",b);
Nlist geti=GetElembyi(L,4);
printf("%d\n",geti->data.num);
Nlist getnum=GetElembynum(L,9);
printf("%f\n",getnum->data.prize);
int fL=sizeof(L);
printf("L=%d\n", fL);
//~Clearlist(L);
printf("length%d\n",Lengthlist(L));
return 0;
}
#include<stdlib.h>
typedef struct{
int num;
float prize;
}Elemtype;
typedef struct nodelist{
Elemtype data;
struct nodelist *font;
struct nodelist *next;
}List,*Nlist;
Nlist Initlist(){
Nlist headnode=(Nlist)malloc(sizeof(List));
headnode->font=NULL;
headnode->next=NULL;
return headnode;
}
Nlist Createnode(int num,float prz){
Nlist new=Initlist();
new->data.num=num;
new->data.prize=prz;
return new;
}
int Lengthlist(Nlist L){
int i=0;
Nlist p=L->next;
while(p){
i++;
p=p->next;
}
return i;
}
void Printlist(Nlist L){
Nlist p=L->next;
int i=0;
while(p){
i++;
printf("\t%d-%f\t",p->data.num,p->data.prize);
p=p->next;
}
printf(" %dnodes has printed\n",i);
}
void Destroylist(Nlist L){
Nlist p=L;
while(L){
p=L;
L=L->next;
free(p);
}
}
void Clearlist(Nlist L){
Nlist p=L->next;
while(p){
p=p->next;
free(p->font);
}
L->next=NULL;
}
Nlist GetElembyi(Nlist L,int i){
Nlist p=L->next;
int j=1;
while(p&&j<i){
p=p->next;
j++;
} // j p同步走所以j=1 p=L->next<=>j=0 p=L
if(!p||j>i) return NULL;
return p;
}
Nlist GetElembynum(Nlist L,int num){
Nlist p=L->next;
while(p){
if(p->data.num==num)
return p;
p=p->next;
}
printf("Didn't found it\n");
return NULL;
}
int Insertnodebyi(Nlist L,int i,int num,float prz){
Nlist p=L; //p=L,是因为可以在头结点之后插入,所以要从头结点开始出发
int j=0;
Nlist e=Createnode(num,prz);
while(p&&j<i){
p=p->next;
j++;
}
if(!p||j>i) return -1;
p->font->next=e;
e->font=p->font;
e->next=p;
p->font=e;
return 0;
}
int Deletenodebyi(Nlist L,int i){//如果p->next=null,则p->next->font不存在!!!
Nlist p=L;
Nlist q;
int j=0;
while(p&&j<i){
p=p->next;
j++;
}
if(!p||j>i) {
printf("Didn't Fount it");
return -1;
}
q=p->font;
q->next=p->next;
while(p->next) p->next->font=q;
free(p);printf("Done\n");
return 0;
}
void Toucha(Nlist L,int num,float prz){
Nlist e=Createnode(num,prz);
e->font=L; //注意!!!想清楚不要乱
e->next=L->next;
L->next=e;
}
void Weicha(Nlist L,int num,float prz){
Nlist e=Createnode(num,prz);
while(L->next) //尾插不能用p=lnext因为空指针lnextnext不存在!
L=L->next;
e->font=L;
L->next=e;
}
int main(){
Nlist L=Initlist();
Toucha(L,1,1.1);
Toucha(L,11,11.1);
Weicha(L,9,9.9);
Weicha(L,99,99.9);
Printlist(L);
//~ Insertnodebyi(L,4,62,62.6);
//~ Insertnodebyi(L,3,662,2.6);
//~ Printlist(L);
int a=Lengthlist(L);
printf("%dnode\n",a);
//~ Deletenodebyi(L,2);
Printlist(L);
int b=Lengthlist(L);
printf("%dnode\n",b);
Nlist geti=GetElembyi(L,4);
printf("%d\n",geti->data.num);
Nlist getnum=GetElembynum(L,9);
printf("%f\n",getnum->data.prize);
int fL=sizeof(L);
printf("L=%d\n", fL);
//~Clearlist(L);
printf("length%d\n",Lengthlist(L));
return 0;
}
