• 链表


    单向链表

    数据元素的逻辑顺序是通过链表中的指针链接次序来实现的。

    1.链表头节点

    为了把插入和删除都统一为后删和后插,增加一个不含数据的链表头节点

    2.头指针

    是指向链表中第一个结点(或为头结点或为数据首结点)的指针
    单链表可由一个头指针唯一确定

    3.头节点

    是在链表的数据首结点之前附设的一个结点;不存数据

    4.数据首结点

    是链表中存储第一个数据元素的结点

    单向链表的定义


    结点

    struct Node
    {
        Type data;
        struct Node* next;
    }
    

    (1)指针后移操作
    p=p->next;
    (2)指向指针的指针
    Node **h;

    基本运算操作的实现


    准构造函数

    void IniNode ( Node *head)        //初始化
    {
        *head=(Node*) malloc(sizeof(Node));
        (*head) -> next = NULL;
    }
    

    创建动态结点

    Node* GetNode(Type item)
    {
    	Node* newnode = (Node*)malloc(sizeof(Node));
    	if (newNode == NULL)
    	{
    		printf("overflow!");
    		exit(1);
    	}
    	newnode->data = item;
    	newnode->next = NULL;
    	return(newnode);
    }
    

    后插运算

    void InsertAfter(Node* p, Node* nextptr)
    {
    	nextptr->next = p->next;
    	p->next = nextptr;
    }
    

    顺序插入(按增序把数据插入链表)

    void Listinsert(Node* head, Type item)
    {
    	Node* p, * newp;
    	p = head;
    	newp = GetNode(item);
    	while (p->next != NULL)
    	{
    		if (p->next ->data < item)
    		{
    			p = p->next;
    		else
    			break;
    		}
    	}
    	InsertAfter(p, newp);
    }
    

    后删

    Node* DeleteAfter(Node* p)
    {
    	Node* t = p->next;
    	if (t != NULL)
    	{
    		p->next = t->next;
    		free(t);
    	}
    }
    

    查找

    Node* FindNode(const Node* h, Type item)
    {
    	Node* p = h->next;
    	while (p != NULL)
    	{
    		if (p->data == item)
    		{
    			break;
    		}
    		p = p->next;
    	}
    	return (p);
    }
    

    清表

    void ListClear(Node* h)
    {
    	Node* p = DeleteAfter(h);//删除数据首结点
    	while (p != NULL)
    	{
    		free(p);//释放空间
    		p = DeleteAfter(h);//继续删除下一个结点
    	}
    }
    

    逆置

    void Revert(Node* head)
    {
    	NOde* rear = head, * del;
    	if (head->next != NULL)
    	{
    		rear = head->next;
    	}
    		while (rear->next != NULL)
    		{
    			del = DeleteAfter(rear);
    			InsertAfter(head, del);
    		}
    }
    
  • 相关阅读:
    SpringBoot入门篇--读取资源文件配置
    SpringBoot入门篇--使用Thymeleaf模板引擎进行页面的渲染
    SpringBoot入门篇--热部署
    NOI2017 游记
    BZOJ 2754 【SCOI2012】 喵星球上的点名
    codeforces 741D Arpa’s letter-marked tree and Mehrdad’s Dokhtar-kosh paths
    BZOJ 4407 于神之怒加强版
    BZOJ 2956 模积和
    BZOJ 4584 【APIO2016】 赛艇
    BZOJ 4591 【SHOI2015】 超能粒子炮·改
  • 原文地址:https://www.cnblogs.com/wangmou-233-1024-com/p/12790412.html
Copyright © 2020-2023  润新知