热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

【数据结构(二)】线性表|单链表|(全)测试代码|用C语言/C++实现单链表的定义、插入、删除、查找、打印输出等基本操作

代码:#include#includetypedefstructLNode{intdata;structLNode*next;}LNo

代码:

#include
#include
typedef struct LNode {int data;struct LNode *next;
}LNode,*LinkList;//基础操作:单链表的按位查找
LNode *GetElem(LinkList L, int i) {int j = 1;LNode *p = L->next;if (i == 0) //是第一个结点return L;if (i < 1) //非法输入return NULL;while (p != NULL && j < i) {p = p->next; j++;}return p;
}
//初始化一个空的单链表(带头结点)
bool InitList(LinkList &L) {L = (LNode *)malloc(sizeof(LNode));//分配一个头结点if (L == NULL) { //分配失败返回falsereturn false;}L->next = NULL; //头结点之后暂时还没有结点return true;
}//判断单链表是否为空(带头节点)
bool Empty(LinkList L) {if (L->next == NULL) {return true;}else {return false;}
}
//基础操作:后插操作
bool InsertNextNode(LNode *p, int e) {if (p == NULL) {return false;}/*********************2.在第i-1个结点后面插入e**********************/LNode *s = (LNode *)malloc(sizeof(LNode));if (s == NULL) { //分配内存失败return false;}s->data = e;s->next = p->next;p->next = s;return true;
}//基础操作:按位序插入:在第i个位置插入元素e
bool ListInsert(LinkList &L, int i, int e) {if (i < 1) {return false;}LNode *p;p = L;//p指向头结点,头结点是第0个结点(不存数据)//但单链表中实际存放的是头结点后面的结点,位序从1开始/*********************1.找到第i-1个结点*******************************/int j = 0;//表示当前p指向的是第几个结点while (p!=NULL && j < i-1) { //jp = p->next;j++;}return InsertNextNode(p, e);
}//基础操作:前插操作
bool InsertPriorNode(LNode *p,int e) {if (p == NULL) {return false;}LNode *s = (LNode *)malloc(sizeof(LNode));if (s == NULL) {return false;}s->next = p->next;p->next = s;s->data = p->data;p->data = e;return true;}
////基础操作:前插操作【王道书版本】
////在p结点之前插入结点s
//bool InsertPriorNode(LNode *p, LNode *s) {
// if (p == NULL||s==NULL) {
// return false;
// }
// s->next = p->next;
// p->next = s;
// int temp = p->data;
// p->data = s->data;
// s->data = temp;
// return true;
//
//}//基础操作:打印单链表数据
void DisplayList(LinkList L) {LNode *p;p = L->next;int i = 0;while (p!= NULL) {printf("%d ", p->data);p = p->next;i++;}printf("一共有%d个元素\n",i);
}//基础操作:按位序删除
bool NodeDelete(LinkList &L, int i,int &e) {if (i < 1) {return false;}LNode *p;LNode *q;int j = 0;p = L;while (p != NULL && j < i - 1) {p = p->next;j++;}if (p == NULL) {return false;}if (p->next == NULL) {//第i-1个结点后面没有其他结点了return false;}q = p->next;e = q->data;p->next = q->next;free(q);return true;
}
//基础操作:删除指定结点p
bool DeleteNode(LNode *p) {if (p == NULL) {return false;}LNode *q = p->next;if (q == NULL) {return false;}p->data = q->data;p->next = q->next;free(q);return true;
}
void main() {LinkList L; //声明一个指向单链表的指针//初始化一个空表InitList(L);DisplayList(L);ListInsert(L, 1, 1);ListInsert(L, 2, 2);ListInsert(L, 3, 3);ListInsert(L, 4, 4);DisplayList(L);ListInsert(L, 3, 7);DisplayList(L);LNode *p;p = L;int i = 0;while (p != NULL && i < 5) {p = p->next;i++;}InsertPriorNode(p, 9);DisplayList(L);int e = -1;NodeDelete(L, 2 ,e);DisplayList(L);printf("删除的元素值为%d\n", e);p = p->next;if (!DeleteNode(p)) { printf("删除失败!\n");}DisplayList(L);
}

结果:

在这里插入图片描述


推荐阅读
  • 本文档提供了数据结构在C语言中的实现示例,特别是解决二次方程的代码片段,以及《数据结构(用面向对象方法与C++语言描述)第二版》的部分习题答案。 ... [详细]
  • 本文探讨如何使用C语言开发一个座位分配系统,包括飞机座位选择、考场座位随机分配等功能,并提供了详细的代码示例。 ... [详细]
  • 本文介绍了Windows驱动开发的基础知识,包括WDF(Windows Driver Framework)和WDK(Windows Driver Kit)的概念及其重要特性,旨在帮助开发者更好地理解和利用这些工具来简化驱动开发过程。 ... [详细]
  • 今天我在操作Git时遇到了一个问题,即我的仓库进入了分离的HEAD状态,这与之前讨论过的‘即使本地有更改,git push仍显示所有内容最新’的问题类似。 ... [详细]
  • 本文深入探讨了Java注解的基本概念及其在现代Java开发中的应用。文章不仅介绍了如何创建和使用自定义注解,还详细讲解了如何利用反射机制解析注解,以及Java内建注解的使用场景。 ... [详细]
  • 本文通过具体示例探讨了在 C++ 中使用 extern "C" 的重要性及其作用,特别是如何影响编译后的对象文件中的符号名称。 ... [详细]
  • 本文档提供了一个使用C语言进行字符串处理的示例,通过输入两个以加号分隔的数字字符串,并计算它们的和。 ... [详细]
  • A题简单判断#includeusingnamespacestd;typedeflonglongll;intt;intmain(){cint;whil ... [详细]
  • 题目描述:孩子们围坐在一起,分享水果,场面温馨。然而,由于孩子们身高不同,排队时显得高低不齐。给定孩子们的身高序列,通过交换某些孩子的顺序,计算每次交换后的序列混乱度。 ... [详细]
  • VSCode中使用Clang-Format进行C/C++代码格式化配置
    本文介绍了如何在VSCode中配置Clang-Format以实现C/C++代码的自动格式化,包括安装必要的扩展、配置文件的创建以及常用设置的解释。建议阅读官方文档以获取更多详细信息。 ... [详细]
  • HDU2044 蜜蜂的路径选择
    题目描述了一只训练有素的蜜蜂,它只能向右移动到相邻的蜂巢,不能后退。任务是计算从一个指定的蜂巢a移动到另一个指定的蜂巢b的所有可能路径数量。 ... [详细]
  • 探讨 SQL Server 中显式谓词锁定机制如何影响外部插入操作,特别是在并发环境下。 ... [详细]
  • 深入解析C语言中的sizeof操作符陷阱
    本文通过一个具体的例子探讨了C语言中sizeof操作符的使用陷阱,并详细分析了导致程序行为异常的原因。 ... [详细]
  • 本文探讨了两种有效的方法来确定一组10个整数中的最大值,包括使用三目运算符和循环结构。 ... [详细]
  • C++编程基础:探索自定义数据类型
    本文继续深入C++编程的基础知识,重点讲解自定义数据类型的概念及其应用,包括枚举类型、结构体和联合体等。 ... [详细]
author-avatar
toto333
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有