C语言链表初试

// DataLink.cpp : 定义控制台应用程序的入口点。
//

#include “stdafx.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;//新开辟空间的地址指上一级节点的节点上,让p成为g_pHead的上一级节点。
g_pHead = p;//新开辟的空间成为头节点g_pHead。
}
//链表尾添加节点。
void AddTail(DATA data)
{
SNode
pNew = (SNode*)malloc(sizeof(SNode));//1、新建立一个节点,用于存入当前数据,并把指向下一节点的指针设为NUll.
pNew->data = data;
pNew->pNext = NULL;
if (!g_pHead)//2、判断头节点是不是空,是空就让刚建立的节点成为头节点。头节点为空怎么向尾巴上加数据啊?
{
g_pHead = pNew;
return;
}
SNode* p = g_pHead;
while (p->pNext!=NULL)//3、找到链表的最后一个节点
{
p = p->pNext;
}
p->pNext = pNew;//4、让新建立的节点成为链表最后一个节点的下一个节点。

}
//删除链表中内容,-1表示数据不存在;;1表示成功
int Delete(DATA data)
{
SNode* p = g_pHead, *p1 = NULL;//p1记录当前节点的上一个节点
if (!p)//空链表的删除
{
return -1;
}
if (p->data == data)//判断第一个节点是不是我们要删除的数据
{
g_pHead = p->pNext;
free( p );
return 1;
}
while §
{
if(p->data == data)
{
p1->pNext = p->pNext;//让当前节点的上一个节点的pNext指向当前节点的下一个节点
free( p );
return 1;
}
p1 = p;//
p = p->pNext;
}

return -1;

}
//查找链表中的内容-1表示失败,1表示成功
int Find(DATA data)
{
SNode *p = g_pHead;
while §
{
if (p->datadata)
{
return 1;
}
p = p->pNext;
}
return -1;
}
//修改链表中的内容-1表示失败,1表示成功
int Modifier(DATA data ,DATA newdata)
{
SNode *p = g_pHead;//让p指向g_pHead所指向的地址。
return -1;
while §
{
if (p->data
data)
{
(*p).data = newdata;
return 1;
}
p = p->pNext;
}
return 0;
}
//输出链表中的内容
void Print()
{
SNode *p = g_pHead;//建立一个临时节点的指针指向头节点
while (p!=NULL)//判断链表是否为空,不为空则输出数据,并临时节点的指针指向下一个节点;为空则结束循环。
{
printf("%d\t", p->data);
p = p->pNext;
}
}
int main()
{
int i=Delete(12);
if (i = -1)puts(“删除失败!”);///空链表测试
i = Find(12);
if (i = -1)puts(“查找失败”);///空链表测试
i = Modifier(12,20);
if (i = -1)puts(“修改失败!”);///空链表测试
AddHead(4);
AddHead(5);
AddHead(6);
AddTail(1);
AddTail(2);
AddTail(3);
Print();//输出6 5 4 1 2 3
puts("");
Modifier(1, -152);
Print();//输出6 5 4 -152 2 3
Delete(4);
Print();//输出6 5 -152 2 3
return 0;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值