链表搞了好久,今晚终于有了眉目,之前做的都是用c++来做,c++中是用类来做的,现在c没有了类,就用结构体来做,看了好久都看不懂,主要是转不过弯来。现在感觉也差不多的。分配空间(好像C++中自动分配),然后数据录入,然后判断是否是头结点,如果是的话就把这个头结点传给head,然后继续循环,当不是头结点的时候,就把数据放到结点的指针域里面(q->next),然后把指针替换。我的理解就是这些。上代码:
- #include <stdio.h>
- #include <stdlib.h>
- #define NULL 0
- //#define LEN sizeof(struct stu)
- //定义结点结构类型
- struct stu
- {
- int num,age;
- stu *next;
- };
- void main()
- {
- stu *head = NULL; //定义头指针并赋值为0
- struct stu *creat(int n); //声明创建链表函数
- void print(stu *q); //声明输出函数
- head = creat(3);
- print(head);
- }
- stu *creat(int n)
- {
- stu *h,*p,*q;
- int i;
- h = NULL;
- for (i=0;i<n;i++)
- {
- p=(stu*)malloc(sizeof(stu)); //分配一个结点的空间给p
- scanf("%d%d",&p->num,&p->age); //输入一个新的结点
- if(h == NULL)
- h = p;
- else
- q->next = p; //新的链表添加到链表的尾部
- q = p;
- }
- q->next = NULL; //最后节点的指针域变为0
- return h;
- }
- void print(stu *q)
- {
- while(q)
- {
- printf("/nnum:%d /nage:%d",q->num,q->age);
- q = q->next;
- }
- }