模拟一个单链表,并模拟生成链表(struct node * creat_list(void)),遍历链表(void travel(struct node * p))
程序如下:
#include<stdio.h>
#include<malloc.h>
#include<stdlib.h>
typedef struct node
{ double val;
struct node *pnode;
} NODE, * PNODE; //NODE等价于 struct node , PNODE等价于struct node *
PNODE creat_list() //生成链表
{ PNODE phead=(PNODE)malloc(sizeof(NODE));
phead->val=NULL;
if(phead==NULL)
{ printf("头结点生成失败!\n");
exit(-1);
}
PNODE ptail=phead; //ptail 用于始终指向当前最后一个结点!!!!!
ptail->pnode=NULL;
int i,lenth;
printf("请输入结点数量\n");
scanf("%d",&lenth);
for(i=0;i<lenth;++i)
{ double temp;
printf("请输入第%d结点的数值\n",i+1);
scanf("%lf",&temp);
PNODE pnew=(PNODE)malloc(sizeof(NODE));
if(pnew==NULL)
{ printf("新结点生成失败!\n");
exit(-1);
}
pnew->val=temp;
ptail->pnode=pnew;
pnew->pnode=NULL;
ptail=pnew;
}
return phead;
}
void travel_list(PNODE phead)
{ PNODE p=(PNODE)malloc(sizeof(NODE));
if(p==NULL)
{ printf("travel_list遍历 结点 生成失败!\n");
exit(-1);
}
p=phead->pnode;
int i;
while((p->pnode)!=NULL)
{ printf("%lf ",p->val);
p=p->pnode;
}
printf("%lf ",p->val);//输出最后尾结点
printf("\n");
//free(p);
}
int main()
{ PNODE phead=creat_list();
travel_list(phead);
return 0;
}
运行结果: