#include <stdio.h>
#include <malloc.h>
//
typedef struct node
{
int data;
struct node *next;
}Node;
// ,
typedef struct nodectrl
{
Node *head;
int num;
}NodeCtrl;
// ,
NodeCtrl *CreateCtrl()
{
NodeCtrl *nc = (NodeCtrl*)malloc(sizeof(NodeCtrl));
if(nc == NULL)
{
puts("Create NodeCtrl failed!");
return NULL;
}
// ,
nc->head = NULL;
nc->num = 0;
return nc;
}
// , ( )
int AddData(NodeCtrl *nc,int data)
{
Node *p,*q;
if(nc == NULL)
return -1;
// Node , data
q = (Node*)malloc(sizeof(Node));
if(q == NULL)
return -1;
//
q->data = data;
q->next = NULL;
// ,
p = nc->head;
// ( )
if(p != NULL)
q->next = nc->head;
nc->head = q;
// , 1
nc->num++;
return 0;
}
// ,
void Display(NodeCtrl *nc)
{
Node *p = NULL;
if(nc == NULL)
return;
printf("Current list has %d data!
",nc->num);
//num , 0, ,
if(nc->num > 0)
{
//
p = nc->head;
//
while(p != NULL)
{
printf("%d
",p->data);
p = p->next;
}
}
}
// , ,
void FreeNodeCtrl(NodeCtrl *nc)
{
// ,q ,p
Node *p,*q;
if(nc == NULL)
return;
// num 0, 1 ,
if(nc->num > 0)
{
//
p = nc->head;
//
while(p != NULL)
{
// p
q = p;
//p , q p
p = p->next;
// p
free(q);
}
}
// , 0
nc->head = NULL;
nc->num = 0;
//
free(nc);
}
int main()
{
int i,data;
NodeCtrl *nc1 = CreateCtrl();
NodeCtrl *nc2 = CreateCtrl();
for(i=0;i<3;i++)
{
scanf("%d",&data);
AddData(nc1,data);
}
for(i=0;i<20;i++)
AddData(nc2,i);
Display(nc1);
FreeNodeCtrl(nc1);
return 0;
}