zoukankan      html  css  js  c++  java
  • 【数据结构】数组模拟链表

    数组模拟链表


    前言

    对于一个踏踏实实用数组的蒟蒻来说这真的是太难了好吗?


    步骤

    1. 首先我们需要设一个数组date用来存原始数值和一个数组right充当指针 如图所示
      这里写图片描述

    2. 这里的right指向date的下一位的date下标(注意是下标而不是数值)

    3. 我们现在尝试模拟一下在排序下插入一个数值6
      明显需要插在date{3}和date{4}之间
      直接把date{10}赋值成6
      然后把right{3}赋值为10(说明date{3}后面连接的数为date{10}就是6)
      接着把right{10}赋值为4(说明date{10}的下一位是date{4}就是8)
      这里写图片描述

    4. 完成插入


    程序实现

    #include<iostream>
    using namespace std;
    int date[101],next[101],n;//我这里的right用next代替
    int main()
    {
    	cin>>n;
    	for(int i=1;i<=n;i++)
    	cin>>date[i];//输入date原始数值
    	for(int i=1;i<=n;i++)
    	{
    		if(i!=n)//判断是否是最后一位
    		next[i]=i+1;//因为是指向下一位的位置所以是i+1
    		else
    		next[i]=0;//最后一位的下一个默认为0
    	}
    	n++;
    	cin>>date[n];
    	int t=1;
    	while(t!=0)//到最后一位停止
    	{
    		if(date[next[t]]>date[n])//判断date的下一位数值是否大于我们插入的新数值
    		{
    			next[n]=next[t];//插入的数值连接到前一个date
    			next[t]=n;//插入的数值连接到后一个date
    			break;//跳出循环
    		}
    		t=next[t];//没找到的话继续跳到下一个date查找
    	}
    	t=1;
    	while(t!=0)
    	{
    		cout<<date[t]<<" ";
    		t=next[t];
    	}
    } 
    

    后记

    • 图片来自《啊哈!算法》如有侵权通知即删
    • 上课的时候老师问会不会大家都说会然而向我一样的蒟蒻就呵呵了
    • 上课的时候不会一定要及时问啊!别害羞!
    • 如果有疑惑或者建议可以在讨论中提出来哦
  • 相关阅读:
    【POI 2007】Office 办公楼(BIU)
    【Codeforces #130 Div2】Solutions
    【TopCoder SRM 551 Div2】Solutions
    【POI 2007】Axes of Symmetry 对称轴(osi)
    【HDU 2222】Keywords Search
    【POI 2007】Tetris Attack 正方体大作战(tet)
    【SGU 101】Domino
    【JSOI 2009】游戏 Game
    【SGU 102】Coprimes
    【Codeforces #133 Div2】Solutions
  • 原文地址:https://www.cnblogs.com/BrokenString/p/9279551.html
Copyright © 2011-2022 走看看