重学数据结构:循环链表的各种操作(C语言)

news/2025/2/22 23:17:20

文章目录

    • 循环单链表定义
      • 初始化
      • 判断节点p是否是尾节点
      • 判断链表是否为空
      • 在节点p后插入节点s
    • 循环双链表定义
      • 初始化
      • 判断节点p是否尾结点
      • 判断链表是否为空
      • 在节点p后加入节点s
      • 删除节点p的后节点

循环单链表定义

其实这里定义的结构跟单链表的没什么区别,只不过在初始化或操作数据的时候,要把next指针指向链表的头指针

#define bool int
#define true 1
#define false 0
typedef struct LNode
{
    struct LNode *next;
	int data;
}LNode,*ScLinkList;


初始化

void InitList(ScLinkList L)
{
    L=(LNode *)malloc(sizeof(LNode));
	if(L==NULL) //有可能内存分配失败
		return;
	L->next=L;
}

判断节点p是否是尾节点

bool IsTail(ScLinkList L,LNode *p)
{
     if(p->next==L)
		 return true;
	 else 
		 return false;
}

判断链表是否为空

bool IsEmpty(DcLinkList L)
{
     if(L->next==L)
		 return true;
	 else 
		 return false;
}

在节点p后插入节点s

void InsertNextNode(LNode *p,LNode *s)
{
    if(p==NULL||s==NULL) return ;
    s->next=p->next;
    p->next=s;
}

循环双链表定义

#define bool int
#define true 1
#define false 0

typedef struct LNode
{
    struct LNode *next,*prior;
	int data;
}LNode,*DcLinkList;

初始化

void InitList(DcLinkList L)
{
    L=(LNode *)malloc(sizeof(LNode));
	if(L==NULL) //有可能内存分配失败
		return;
	L->next=L;
	L->prior=L;
}

判断节点p是否尾结点

bool IsTail(DcLinkList L,LNode *p)
{
     if(p->next==L)
		 return true;
	 else 
		 return false;
}

判断链表是否为空

bool IsEmpty(DcLinkList L,)
{
     if(L->next==L)
		 return true;
	 else 
		 return false;
}

在节点p后加入节点s

void InsertNextNode(LNode *p,LNode *s)
{
    if(p==NULL||s==NULL) return ;
    s->next=p->next;
    s->prior=p;
    p->next->prior=s;
    p->next=s;
}


删除节点p的后节点

void DelteNextNode(LNode *p)
{
    if(p==NULL) return ;
    LNode *q=p->next;
    p->next=q->next;
    q->next->prior=p;
    free(q);
}


http://www.niftyadmin.cn/n/1255582.html

相关文章

重学数据结构:静态链表的各种操作(C语言)

文章目录静态链表定义初始化链表打印链表根据序号获取对应的值在对应序号节点后增加节点在对应序号节点后删除节点测试输出结果静态链表定义 #include <stdio.h> #include <string.h>#define maxSize 50typedef struct {int index;int data; }StaticLink[maxSize]…

布尔代数_布尔代数中的最小和最大项符号

布尔代数In short or for convenience purposes, we represent canonical SOP/POS form in min/max terms. 简而言之或为方便起见&#xff0c;我们以最小/最大术语表示规范的SOP / POS形式 。 最小项 (Minterm) Each of the product terms in the canonical SOP form is calle…

20154312 曾林 ExpFinal CTF Writeup

0.写在前面 1.不合理的验证方式 2.加密与解密的对抗 3.一个SQL引发的血案 4.管理员的诟病 5.备份信息的泄露 6.svn信息泄露 7.coding 8.平衡权限的威胁 9.文件上传的突破 10.文件下载的利用 11.include的沦陷 12.include的沦陷&#xff08;二&#xff09; 13.exce的沦陷 14.ftp…

重学数据结构:顺序栈的各种操作(C语言)

文章目录顺序栈的定义判断栈空判断栈满初始化栈创建栈输出栈压栈退栈获取栈顶元素测试代码测试结果顺序栈的定义 #define MaxSize 50 #define bool int #define true 1 #define false 0;typedef struct {int top;int data[MaxSize]; }SqStack;判断栈空 bool IsEmpty(SqStack …

ruby 集合 分组_从Ruby中的两个集合中找到共同的元素

ruby 集合 分组Ruby is very rich in the library. It has various methods for meeting specific functionalities. In Ruby, operators are basically methods with two arguments generally. We have gone through the description of sets in Ruby. We have seen their imp…

SpringBoot日记——编码配置篇

插入一个小篇章&#xff0c;有人在编写代码的时候&#xff0c;要么控制台乱码&#xff0c;要么页面乱码等等&#xff0c; 我这里有个配置&#xff0c;可以解决各种乱码问题&#xff0c;直接来看。 # 编码配置 spring.banner.charsetUTF-8 server.tomcat.uri-encodingUTF-8 sp…

c ++ 继承_C ++继承| 查找输出程序| 套装2

c 继承Program 1: 程序1&#xff1a; #include <iostream>#include <string.h>using namespace std;class Person {char name[15];int age;protected:void SetPerson(int age, char* name){this->age age;strcpy(this->name, name);}void PrintPerson(){c…

重学数据结构:链栈的各种操作(C语言)

文章目录链栈的定义头插法建立链表(带头节点)打印链栈压栈退栈测试代码测试结果链栈的定义 其实跟链表的结构是一样的&#xff0c;连同操作基本一样&#xff0c;但是链栈只能在一端进行删除节点和增加节点. typedef struct LNode {struct LNode *next;int data;int maxsize; …