静态链表的应用

简介

静态链表也是由数据域与指针域两部分组成的一个结构体,只不过指针域是由整数下标表示

cpp 复制代码
struct node{
      int data;//数据域
      int next;//指针域
      };

求两个链表首个公共结点的地址

cpp 复制代码
#include <cstdio>
#include <cstring>
using namespace std;
const int maxn=100000000;
struct node{
   char data;
    int next;
    bool flag;
}nodes[maxn];
int main(){
    for(int i=0;i<maxn;i++)
    nodes[i].flag=false;
    int addr1,addr2,n;//链表1的首地址addr1、个数n,链表2的首地址addr2
    scanf("%d%d%d",&addr1,&addr2,&n);
    int addr,next;
    char data;
    for(int i=0;i<n;i++){//将链表信息边输入边存入
        scanf("%d%s%d",&addr,&data,&next);
        nodes[addr].data=data;
        nodes[addr].next=next;
    }
    int j;
    for( j=addr1;j!=-1;j=nodes[j].next)//遍历链表1,
    nodes[j].flag=true;//改flag为true
    for( j=addr2;j!=-1;j=nodes[j].next){//遍历链表2
        if(nodes[j].flag==true) break;//找到在链表1中首个出现过的结点
    }
    if(j!=-1) printf("%05d\n",j);//返回结点地址
    else printf("-1\n");
    return 0;
}

由小到大输出静态链表

cpp 复制代码
#include <cstdio>
#include <algorithm>
using namespace std;
const int maxn=100000;
struct node{
    int now;
    int data;
    int next;
    bool flag;
}nodes[maxn];
bool cmp(node a,node b){//排序后,flag==true都在flag==false左端
    if(a.flag==false||b.flag==false)//碰到无效结点排序
    return a.flag>b.flag;//true在前,false在后
    else return a.data<b.data;//给结点排序
}
int main(){
    for(int i=0;i<maxn;i++)
    nodes[i].flag=false;
    int begin,num;
    scanf("%d%d",&begin,&num);
    int addr1,data,addr2;
    for(int i=0;i<num;i++){
        scanf("%d",&addr1);
        scanf("%d%d",&nodes[addr1].data,&nodes[addr1].next);
        nodes[i].now=addr1;
    }
    int position=begin,count=0;
    while(position!=-1){
        nodes[position].flag=true;//标记
        count++;
        position=nodes[position].next;
    }
    if(count==0)
    printf("0 -1\n");
    else{
        sort(nodes,nodes+maxn,cmp);//地址不连续,只能全部都考虑
        printf("%d %d\n",count,nodes[0].now);//输出首个地址
        for(int i=0;i<count;i++){
            if(i!=count-1)
        printf("%d %d %d\n",nodes[i].now,nodes[i].data,nodes[i].next);
        else
        printf("%d %d -1\n",nodes[i].now,nodes[i].data);
        }
    }
    return 0;
}
相关推荐
ChoSeitaku4 分钟前
链表循环及差集相关算法题|判断循环双链表是否对称|两循环单链表合并成循环链表|使双向循环链表有序|单循环链表改双向循环链表|两链表的差集(C)
c语言·算法·链表
workflower1 小时前
数据结构练习题和答案
数据结构·算法·链表·线性回归
一个不喜欢and不会代码的码农1 小时前
力扣105:从先序和中序序列构造二叉树
数据结构·算法·leetcode
No0d1es3 小时前
2024年9月青少年软件编程(C语言/C++)等级考试试卷(九级)
c语言·数据结构·c++·算法·青少年编程·电子学会
bingw01143 小时前
华为机试HJ42 学英语
数据结构·算法·华为
Yanna_1234564 小时前
数据结构小项目
数据结构
木辛木辛子5 小时前
L2-2 十二进制字符串转换成十进制整数
c语言·开发语言·数据结构·c++·算法
誓约酱6 小时前
(动画版)排序算法 -希尔排序
数据结构·c++·算法·排序算法
誓约酱6 小时前
(动画版)排序算法 -选择排序
数据结构·算法·排序算法
可别是个可爱鬼7 小时前
代码随想录 -- 动态规划 -- 完全平方数
数据结构·python·算法·leetcode·动态规划