数据结构——小王子单链表(C++)

题目:

小王子有一天迷上了排队的游戏,桌子上有标号为 1-10 按顺序摆放的 10 个玩具,现在小王子想将它们按自己的喜好进行摆放。小王子每次从中挑选一个好看的玩具放到所有玩具的最前面。已知他总共挑选了 M 次,每次选取标号为 X 的玩具放到最前面,求摆放完成后的玩具标号。

给出一组输入,M=8 共计排了 8 次,这 8 次的序列为 9,3,2,5,6,8,9,8。 求最终玩具的编号序列。

思路:

输入:
挑选的次数:n
排前玩具的标号:x
输出:
每次摆放后的顺序
过程:
首先,根据输入所给的x遍历链表,寻找该结点,然后将其删除,然后,在头结点后插入一个值为x的新结点,最后,整体输出新链表即可。

知识补充

链表,是线性表的链式存储结构,特点的是链表中元素的逻辑次序和物理次序不一定相同。
链表是由若干个结点组成,其中,一个结点是由数据域指针域组成。

  • 数据域:数据元素的映像
  • 指针域:指示后继元素存储位置

代码:

#include <iostream>
using namespace std;
//先定义结点型数据——结构体
struct Node
{
	int data;//数据域,存储本结点的数据 
	Node* next;//指针域,指向下一个结点	
 };
//有头结点的单链表
Node *head=new Node; 
 //创建一个单链表,并赋值
  //尾插结点法 
  void init_end()
  {
	head->next=NULL;
  	for(int i=10;i>0;i--)
  	{
  		Node* temp=new Node;
  		temp->data=i;
  		temp->next=head->next;
  		head->next=temp;
  		}
   } 
  //输出链表
  void show()
  {
  	for(Node *temp=head->next;temp!=NULL;temp=temp->next)
  	{
  		cout << temp->data << " ";
	  }
	cout << endl;
   } 
//查询并删除结点 
void inquire(int x)
{
	Node *precursor=head;
	for(Node *temp=head->next;temp!=NULL;temp=temp->next)
  	{
  		if(temp->data==x)
  		{
  			precursor->next=temp->next;
  			delete temp;
			  return; 
		  }
		precursor=temp;
	  }
}
//插入结点
void insert(int x)
{
	Node *temp=new Node;
	temp->data=x;
	
	temp->next=head->next;
	head->next=temp;
 } 
int main()
{
	int n,x;
	init_end();
	cin >> n; //n表示排队的次数 
	for(int i=1;i<=n;i++)
	{
		cin >> x;//x表示所排的玩具标号 
		inquire(x);
		insert(x); 
		show();	
	 } 
	return 0;
 } 

写博客的目的是为了记录自己所学的知识,如果本文中的内容能帮到大家的话,就更完美啦!!!
当然,如果有错误,麻烦大家评论区告知一下!!!我会积极改进的。3Q3Q
在这里插入图片描述

  • 3
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
小王子单链表是一种基于Python语言实现的数据结构,它是一种线性表的存储结构,由一系列节点组成,每个节点包含两部分:数据域和指针域。数据域用于存储具体的数据,指针域用于指向下一个节点。 在小王子单链表中,每个节点只能指向下一个节点,最后一个节点的指针域为空。这样的设计使得在插入、删除等操作时,只需要修改相邻节点的指针域,而不需要移动其他节点,提高了操作效率。 下面是一个简单的小王子单链表的Python实现示例: ```python class Node: def __init__(self, data): self.data = data self.next = None class LinkedList: def __init__(self): self.head = None def is_empty(self): return self.head is None def append(self, data): new_node = Node(data) if self.is_empty(): self.head = new_node else: current = self.head while current.next: current = current.next current.next = new_node def insert(self, data, position): if position <= 0: new_node = Node(data) new_node.next = self.head self.head = new_node else: current = self.head count = 0 while current and count < position - 1: current = current.next count += 1 if current: new_node = Node(data) new_node.next = current.next current.next = new_node def delete(self, data): if self.is_empty(): return if self.head.data == data: self.head = self.head.next else: current = self.head while current.next and current.next.data != data: current = current.next if current.next: current.next = current.next.next def display(self): current = self.head while current: print(current.data, end=" ") current = current.next print() # 示例代码 linked_list = LinkedList() linked_list.append(1) linked_list.append(2) linked_list.append(3) linked_list.insert(4, 1) linked_list.delete(2) linked_list.display() ``` 以上是一个简单的小王子单链表的Python实现示例,包括了常用的插入、删除和显示操作。你可以根据自己的需求进行扩展和修改。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值