zoukankan      html  css  js  c++  java
  • 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;
    }
  • 相关阅读:
    营销型站点的建设流程是什么?
    MAC 通过brew安装软件
    Android实现分享内容到微信朋友圈
    C++设计模式之适配器模式(三)
    JEECG平台权限设计
    .Net修改网站项目调试时的虚拟目录(未验证)
    .Net修改网站项目调试时的虚拟目录
    ECharts.js学习动态数据绑定
    百度ECharts
    asp.net loading 动画
  • 原文地址:https://www.cnblogs.com/tamias/p/12898777.html
Copyright © 2011-2022 走看看