结构体变量与单链表---头插法

因为数组仅仅能储存同一种类型变量的很拘束,所以有了结构体变量,使使用者可以任意的定义自己的变量集体,并自己命名。

当你开辟一个结构体变量的空间时,编译器会自动给你准备好里面的变量(你提前设计的),引用时的名称是一样的;

eg.

#include
#include
//创建结构体 
struct Node
{
    int date;
    //数据域 
    struct Node* next;
    //指针域 
};

//   头结点函数----返回头结点的地址 
struct Node*creatlist()
{
    struct Node* headNode=(struct Node*)malloc(sizeof(struct Node));
    //malloc函数开辟结构体指针空间 
    //并保存结构体的地址 
    headNode->next=NULL;
    //结构体指针域为空 
    return headNode;
    //返回头结点的地址 
    //好像就是临时的?     结构体指针head保存的是新增结构体的地址!!!
};
//新增结点函数 ---返回新结构体的地址 
struct Node*creatNode(int date)
{
    struct Node*newNode=(struct Node*)malloc(sizeof(struct Node));//malloc函数返回的是新结点的地址 
    //开辟新的结构体 //临时接受新结点的地址 
    newNode->date=date;
    //数据域赋值 
    newNode->next=NULL;
    //指针域赋值 
    return newNode;
    //返回新结点的地址 
};
//打印链表 
void printList(struct Node*headNode)
{
    struct Node*Pmove=headNode->next;
    //将第一个结点的地址给有输出作用的指针 
    while(Pmove)
    {
        printf("%d",Pmove->date);
        //输出数据域 
        Pmove=Pmove->next;
        //移动到下一个结点 
    }
    printf("\n");

}
//插入新结点函数 -------头插法 
void insert_Node_By_HeadNode(struct Node*headNode,int date)//传入前驱结点和新增结点数据域 
{
    struct Node*newNode=creatNode(date);
    //调用新增结点函数 
    //struct Node*newNode头 接受新增结点的地址 
    newNode->next=headNode->next;
    headNode->next=newNode;
}
int main()
{
    /*
    思路实现:
    创建首结点和头指针
    再向其中插入新的结点 
    */
    struct Node*list=creatlist();
    //创建头结点和头指针 
    insert_Node_By_HeadNode(list,1);
    insert_Node_By_HeadNode(list,2);
    insert_Node_By_HeadNode(list,3);
    printList(list);//传入头指针 
    //打印链表 
}

你可能感兴趣的:(c语言)