c++链表(c++链表实现)

本篇文章给大家谈谈c++链表,以及c++链表实现对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。

本文目录一览:

C语言链表创建和输入

敢问楼主,为何要两个链表?你的需求一个链表完全搞定了啊,第二个链表是用来做什么的?

#includestdio.h                                                               

#includestdlib.h                                                              

struct student{                                                                 

    char name[10];                                                                 

    char id[10];          祥蠢数                                                         

    struct student *next;                                                   档慎       

};                                                                              

int main(void)                                                                  

{                                                         谨首                      

   int n;                                                                       

   printf("请输入要学生个数,以回车结束!\n");                                  

   scanf("%d",n);                                                              

   struct student *head=(struct student *)malloc(sizeof(struct student));       

   head-next=NULL;                                                             

   struct student *end=head;                                                    

   for(int i=0;i!=n;i++)                                                        

   {                                                                            

           struct student*p=(struct student *)malloc(sizeof(struct student));         

           p-next=NULL;                                                              

           printf("第%d个学生信息:\n",i+1);                                          

           printf("  姓名:");                                                        

           scanf("%s",p-name);                                                      

           printf("  学号:");                                                        

           scanf("%s",p-id);                                                        

           end-next=p;                                                               

           end=p;                                                                     

   }                                                                            

   for(struct student *p=head-next;p!=NULL;p=p-next)                          

   {                                                                            

           printf("姓名:%s  学号:%s \n",p-name,p-id);                               

   }                                                                            

}

截图如下:

C语言 关于链表的创建

#include stdio.h

#include stdlib.h

typedef int elemtype;

typedef struct Lnode {

elemtype data;

Lnode *next;

}Lnode;

Lnode *CreatList(Lnode *Head) {

Head = (Lnode *)malloc(sizeof(Lnode));

Head-next = NULL;

Lnode *p = Head;

printf("冲咐败请输入散颤元素的个数:");

int i,n;

scanf("%d", n);

for(i = 0; i  n; ++i) {

p-next = (Lnode 简羡*)malloc(sizeof(Lnode));

printf("请输入第%d个元素:",i + 1);

scanf("%d", p-next-data);

p = p-next;

}

p-next = NULL;

return Head;

}

void AllList(Lnode *head) {

Lnode *p = head-next;

while(p) {

printf("%d ", p-data);

p = p-next;

}

printf("\n");

}

int main() {

Lnode *head = NULL;

head= CreatList(head);

AllList(head);

return 0;

}

C语言里面的链表是什么

C语言里面兄桥的链表是一种数据结构

是一种线形的存储结构

链表和数组一样,也是将一组同类型的数据组织在一起的一种数据结构

不同的是

数组采用的是顺序存储,依靠数组的首地址和元素的相对地址(下标)来实现访问。

优点是访问方便快捷,而缺点是数州尘搜组是静态的,不利于实现元素的动态增减。

而链表采用的是离散存储,依靠节册历点间的指向下一个节点的指针来实现访问。

其优缺点和数组相反

[img]

在C语言中,什么是链表呀?

链表

链表链表是一种物理存储单元上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的。链表由一系列结点(链表中每一个元素称为结点)组成,结点可以在运行时动态生成。每个结点包括两个部分:一个是存亮态储数据元素的数据域,另一个是存储下一个结点地址的指针域。 相比于线性表顺序结构,链表比较方便插入和删除操作。

概况

链表(Linked list)是一种常见的基础数据结构,是一种线性表,但是并不会按线性的顺序存储数据,而是在每一个节点里存到下一个节点的指针(Pointer)。由于不必须按顺序存储,链表在插入的时候可以达到O(1)的复杂度,比另一种线性表:顺序表快得多,但是查找一个节点或者访问特定编号的节点则需要O(n)的时间,而顺序表相应的时间复杂度分别是O(logn)和O(1)。使用链表结构可以克服数组链表需要预先知道数据大小的缺点,链表结构可以充分利用计算机内存空间,实现灵活的内存动态管理。但是链表失去了数组随机读取的优点,同时链表由于增加了结点的指针域,空间开销比较大。在计算机科学中,链表作为一种基础的数据结构可以用来生成其它类型的数据结构。链表通常由一连串节点组成,每个节点包含任意的实例数据(data fields)和一或两个用来指向明上一个/或下一个节点的位置的链接("links")。链表最明显的好处就是,常规数组排列关联项目的方式可能不同于这些数据项目在记忆体或磁盘上顺序,数据的存取往往要在不同的排列顺序中转换。而链表是一种自我指示数据类型,因为它包含指向另一个相同类型的数据的指针(链接)。链表允许插入和移除表上任意位置上的节点,[1]但是不允许随机存取。链表有很多种不同的类型:单向链表,双向链表以及循环链表。链表可以在多种编程语言中实现。像Lisp和Scheme这样的语言的内建数据类型中就包含了链表的存取和操作。程序语言或面向对象语言,如C,C++和Java依靠易变工具来生成链表。

编辑本段特点

线性表的链式存储表示的特点是用一组任意的存储单元存储线性表的数据元素(这组存储单元可以是连续的,也可以是不连续的)。因此,为了表示每个数据元素 与其直接后继数据元素 之间的逻辑关系,对数据元素 来说,除了存储其本身的信息之外,还需存储一个指示其直接后继的信息(即直接后念隐继的存储位置)。由这两部分信息组成一个"结点"(如概述旁的图所示),表示线性表中一个数据元素 。

编辑本段扩展

根据情况,也可以自己设计链表的其它扩展。但是一般不会在边上附加数据,因为链表的点和边基本上是一一对应的(除了第一个或者最后一个节点,但是也不会产生特殊情况)。不过有一个特例是如果链表支持在链表的一段中把前和后指针反向,反向标记加在边上可能会更方便。 对于非线性的链表,可以参见相关的其他数据结构,例如树、图。另外有一种基于多个线性链表的数据结构:跳表,插入、删除和查找等基本操作的速度可以达到O(nlogn),和平衡二叉树一样。 其中存储数据元素信息的域称作数据域(设域名为data),存储直接后继存储位置的域称为指针域(设域名为next)。指针域中存储的信息又称做指针或链。 由分别表示,,…, 的N 个结点依次相链构成的链表,称为线性表的链式存储表示,由于此类链表的每个结点中只包含一个指针域,故又称单链表或线性链表.

编辑本段三个链表函数(C语言描述)

#include stdio.h

#include stdlib.h

#include iostream

struct Node{

int data;//数据域

struct Node * next;//指针域

}; /************************************************************************************** *函数名称:insert

*函数功能:在链表中插入元素. *输入:head 链表头敬高源指针,p新元素插入位置,x 新元素中的数据域内容 *输出:无 *************************************************************************************/ void insert(Node * head,int p,int x)

{ Node * tmp = head; //for循环是为了防止插入位置超出了链表长度 for(int i = 0;ip;i++)

{

if(tmp == NULL)

return ;

if(ip-1)

tmp = tmp-next;

}

Node * tmp2 = new Node;

tmp2-data = x;

tmp2-next = tmp-next;

tmp-next = tmp2;

} /************************************************************************************** *函数名称:del *函数功能:删除链表中的元素 *输入:head 链表头指针,p 被删除元素位置 输出:被删除元素中的数据域.如果删除失败返回-1 **************************************************************************************/

int del(Node * head,int p)

{

Node * tmp = head;

for(int i = 0;ip;i++)

{

if(tmp == NULL)

return -1;

if(ip-1)

tmp = tmp-next;

}

int ret = tmp-next-data;

tmp-next = tmp-next-next;

return ret;

}

void print(Node *head)

{

for(Node *tmp = head;

tmp!=NULL; tmp = tmp-next)

printf("%d ",tmp-data);

printf("\n");

}

int main()

{

Node * head;

head = new Node;

head-data = -1;

head-next=NULL;

return 0;

}

编辑本段结语

C语言是学习数据结构的很好的学习工具。理解了C中用结构体描述数据结构,那么对于理解其C++描述,Java描述都就轻而易举了!

编辑本段两种链表形式

一、循环链表 循环链表是与单链表一样,是一种链式的存储结构,所不同的是,循环链表的最后一个结点的指针是指向该循环链表的第一个结点或者表头结点,从而构成一个环形的链。 循环链表的运算与单链表的运算基本一致。所不同的有以下几点: 1、在建立一个循环链表时,必须使其最后一个结点的指针指向表头结点,而不是象单链表那样置为NULL。此种情况还使用于在最后一个结点后插入一个新的结点。 2、在判断是否到表尾时,是判断该结点链域的值是否是表头结点,当链域值等于表头指针时,说明已到表尾。而非象单链表那样判断链域值是否为NULL。

二、双向链表 双向链表其实是单链表的改进。 当我们对单链表进行操作时,有时你要对某个结点的直接前驱进行操作时,又必须从表头开始查找。这是由单链表结点的结构所限制的。因为单链表每个结点只有一个存储直接后继结点地址的链域,那么能不能定义一个既有存储直接后继结点地址的链域,又有存储直接前驱结点地址的链域的这样一个双链域结点结构呢?这就是双向链表。 在双向链表中,结点除含有数据域外,还有两个链域,一个存储直接后继结点地址,一般称之为右链域;一个存储直接前驱结点地址,一般称之为左链域。

C语言中链表的具体用途

链表是一种数据结构 是一种线形的存储结构 转一个小文章

C/C++ code 准备:动态内存分配 一、为什么用动态内存分配 但我们未学习链表的时候,如果要存储数量比较多的同类型或同结构的数据的时候,总是使用一个数组。比如说我们要存储一个班级学生的某科分数,总是定义一个float型(存在0.5分)数组: float score[30]; 但是,在使用数组的时候,总陪祥有一个问题困扰着我们:数组应该有多大? 在很多的情况下,你并不能确定要使用多大的数组,比如上例,你可能并不知道该班级的芦枯搏学生的人数,那么你就要把数组定义得足够大意兄弟几个当初一家子,都在一块住,这就是数组

后来都成家了,在一起住不方败渗便,就各自分开住了,但形式上还是一家,这就是链表

关于c++链表和c++链表实现的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。

标签列表