C语言学习笔记--单向链表Markdown版本
一.链表的概念:
1.如果结构体成员变量中有指向相同类节点的指针变量,那么就能够将一个个的解构
具体的变串连起来,这样的一系列节点形象上像一条链子,我们称之为链表
2.每个节点都有两部分组成:数据区+地址区(指向自身结构体的指针变量)
3.其中指向自身类型节点的指针,我们称之为地址域
4.最后一个节点没有下一个节点,地址域赋值为NULL
二.链表的特征
1.(单)链表:必须有链表头pHeader;
2.通过链表头,可以顺次向下访问所有的节点
3.如果是空链表链表头为0,pHeader=NULL;
4.链表尾节点:类似于null结尾的字符串,最后一个节点的指针pNext==0
5.可以在任意位置插入和删除节点。
#include <stdio.h>
#include <stdlib.h>
typedef int DATA;
struct SNode
{
DATA data;//数据区域
SNode* pNext;//指针区域
};
SNode *g_pHead = NULL;
void AddHead(DATA data)
{
SNode *p = (SNode*)malloc(sizeof(SNode));
p->data = data;
p->pNext = g_pHead;
g_pHead = p;
}
void AddTail(DATA data)
{
}
void Delete(DATA data)
{
}
//指定节点修改数据
void Modify(DATA data, DATA newData)
{
SNode * p = g_pHead;
while (p)
{
if (p->data == data)
p->data = newData;
p = p->pNext;
}
}
int Find(DATA data)
{
SNode * p = g_pHead;
while (p)
{
if (p->data == data)
return 1;
p = p->pNext;
}
return 0;
}
void Print()
{
SNode * p = g_pHead;
while (p)
{
printf("%d", p->data);
p = p->pNext;
}
}
int main()
{
AddHead(3);
AddHead(2);
AddHead(1);
puts("修改前");
Print();
Modify(2, -888);
puts("修改后:");
Print();
if (Find(-888))
{
puts("查找成功");
}
else
{
puts("查找失败");
}
return 0;
}