数据结构与算法——链表的创建,堆栈,队列

持续分享嵌入式技术,操作系统,算法,c语言/python等,欢迎小友关注支持

前言

本篇文章我们讲述一下链表的创建方法。链表创建的方法分为两种,主要分为头插法,和尾插法,也叫堆栈式和对列式。

建立单链表算法总结:

  • 头插法:在链表的头部插入结点建立单链表,数据读入顺序和线性表中的逻辑顺序正好相反。即先入后出也叫堆栈式。
  • 尾插法:在链表的尾部插入结点建立单链表,数据读入顺序和线性表中的逻辑顺序正好相同。即先入先出也叫对列式

堆栈方式建立单链表(头插法)

每次把新结点插入到链表的头部,使新插入的结点成为第一个实际的元素结点。

数据结构与算法——链表的创建,堆栈,队列

 

头插法建表从一个空表开始,重复读入数据,生成新结点,将读入数据存放到新结点的数据域中,然后将新结点插入到当前链表的表头结点之后,直至读入结束标志为止。

代码实现:

node * creatlistf()
{
  datatype data; node * head, *s; 
  s=(linklist)malloc(sizeof(node)); 
  s->next=NULL; 
  head=s;
  printf(“\n输入数据序列,以0结束:\n"); 
  scanf("%d",&data);
  while (data!=0) { 
  s=(node *) malloc(sizeof(node));
  s->info=data;
  s->next=head->next;  // 新插入的结点成为第一个实际元素结点
  head->next=s;
  scanf("%d",&data); } 
  return head; 
}

队列方式建立单链表(尾插法)

每次把新结点插入到链表的尾部,使新插入的结点成为尾结点。

数据结构与算法——链表的创建,堆栈,队列

 

将新结点插到当前单链表的表尾上。增加一个尾指针r,使之指向当前单链表的表尾。

代码实现:

node* creatlistr( )
{ 
  datatype data; node *head,*s,*r;
  s=(linklist)malloc(sizeof(node)); 
  s->next=NULL;
  head=s; 
  r=s; 
  scanf("%d",&data);
  while (data!=0) { 
  s=(node *)malloc(sizeof(node)); 
    s->info=data; /*产生新结点*/ 
    r->next=s; 
    r=s; 
    scanf("%d",&data); 
  } 
  if (r!=NULL) 
    r->next=NULL; /*处理表尾结点指针域*/
  return head; 
}

好了,以上就是链表创建的方法,分别采用了头插法和尾插法表示,但是这个只是单链表的实现方法,之前有讲过链表和单链表,双链表,循环链表之分,这些会在后面的文章中一一阐述,喜欢文章的朋友可以点赞关注。

如果觉得文章对你有帮助,请点赞关注下。如有错误欢迎指正

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,我来依次讲解一下堆栈队列、哈希、链表。 1. 堆栈(Stack) 堆栈是一种数据结构,它是一种先进后出(LIFO)的线性结构。堆栈有两个基本操作: 入栈(push)和出栈(pop)。入栈将一个元素加入到堆栈的顶部,出栈则是将堆栈顶部的元素弹出。堆栈可以用数组或链表实现。 堆栈的应用非常广泛,比如函数调用栈、表达式求值、浏览器的后退和前进等。 2. 队列(Queue) 队列是一种数据结构,它是一种先进先出(FIFO)的线性结构。队列有两个基本操作: 入队(enqueue)和出队(dequeue)。入队将一个元素加入到队列的尾部,出队则是将队列头部的元素弹出。队列也可以用数组或链表实现。 队列的应用也非常广泛,比如任务调度、消息队列、打印队列等。 3. 哈希(Hash) 哈希是一种将任意长度的消息压缩到某一固定长度的消息摘要的函数。哈希函数可以将任意长度的数据映射为固定长度的数据,这个固定长度的数据就是哈希值。常见的哈希算法有MD5、SHA-1、SHA-256等。 哈希表是一种数据结构,它基于哈希函数实现。哈希表通过将关键字映射为哈希值,然后将哈希值作为数组的下标,将对应的数据存储在数组中。哈希表的查找和插入操作都非常快,时间复杂度为O(1)。 哈希表的应用非常广泛,比如字典、缓存、路由表等。 4. 链表(Linked List) 链表是一种数据结构,它由一系列节点组成,每个节点包含数据和一个指向下一个节点的指针。链表可以分为单向链表、双向链表和循环链表等。 链表的插入和删除操作非常快,时间复杂度为O(1)。但是链表的查找操作比较慢,时间复杂度为O(n)。 链表的应用也非常广泛,比如LRU缓存、高精度计算等。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值