一、链表
这里我们来做一个简易的链表,做一个班级统计簿,里面包含学号id以及姓名,首先用
typedef创建结构体,结构体内部定义三个变量学号,姓名,下一个节点的地址。给结构体命名为
List,代码如下:
#include <stdio.h>
typedef struct Node
{
int id;
char* name;
struct Node* pNext;
}List;
先定义下一个节点的地址为空,然后依次将下一节点的地址赋给上一个的pNext。先设置最
开始的List* p为a节点的地址,通过while循环将学号与姓名依次输出,并将pNext赋给p。
代码如下:
int main()
{
List a = { 1,"小刚",NULL };
List b = { 2,"小王",NULL };
List c = { 3,"小赵",NULL };
List d = { 4,"小明",NULL };
List e = { 5,"小红",NULL };
a.pNext = &b;
b.pNext = &c;
c.pNext = &d;
d.pNext = &e;
List* p = &a;
while (p != NULL)
{
printf("%d %s\n", p->id, p->name);
p = p->pNext;
}
return 0;
}
二、链表添加
每个结构体每次开辟新空间的代码
#include <stdlib.h>
List* GetNode(int id, char* name)
{
List* pTemp=malloc(sizeof(List));
pTemp->id =id;
pTemp->name = name;
pTemp->pNext = NULL;
return pTemp;
}
pphead=&phead *pphead=phead
在主函数中使phead和pend都指向空, AddNode函数判断此时节点是否为空,判断头指针是
否为空,若不为空,则使*ppend指向下一个新节点的地址;反之,则使头指针指向新节点地址,
然后使*ppend指向下一个新节点的地址。之后再进行新一轮的判断。
void AddNode(List** pphead, List** ppend, List* pNode)
{
if (NULL == *pphead)
{
*pphead = pNode;
}
else
{
(*ppend)->pNext = pNode;
}
*ppend = pNode;
}
下面是主函数,先使头指针和尾指针都为空NULL,然后通过GetNode和AddNode函数定义List。
int main()
{
List* phead = NULL;
List* pend = NULL;
AddNode(&phead, &pend, GetNode(1, "aa"));
AddNode(&phead, &pend, GetNode(2, "bb"));
AddNode(&phead, &pend, GetNode(3, "cc"));
AddNode(&phead, &pend, GetNode(4, "dd"));
while (phead != NULL)
{
printf("%d %s\n", phead->id, phead->name);
phead = phead->pNext;
}
return 0;
}