静态链表

#include<iostream>
#include<cstdio>
#include<stdlib.h>
#include<malloc.h>
#define TRUE 1
#define FALSE 0
#define OK 1
#define ERROR 0
#define INFEASIBLE -1
#define OVERFLOW -2
#define MAXSIZE 10 
using namespace std;
typedef int ElemType;
typedef int Status;
typedef struct{
    ElemType data;
    int cur;
}component,SList[MAXSIZE];

//生成备用链表 
void initSpace(SList& space){
    for(int i=0;i<MAXSIZE-1;i++){
        space[i].cur=i+1;
    }
    space[MAXSIZE-1].cur=0;
}
int mallocLocation(SList& space){
    int position=space[0].cur;
    if(position){
        space[0].cur=space[position].cur;
    }
    return position; 
}
void freeSL(SList& space,int k){

    space[k].cur=space[0].cur;
    space[0].cur=k;
}
void difference(SList& space,int &head){
    initSpace(space);
    head=mallocLocation(space);//生成头节点 
    int n,m,r=head;
    scanf("%d%d",&n,&m); 
    for(int i=0;i<n;i++){
        int t=mallocLocation(space);
        scanf("%d",&space[t].data);
        space[r].cur=t;
        r=t;
    }
    space[r].cur=0;
    for(int i=0;i<m;i++){
        int temp,pre=head;
        scanf("%d",&temp);
        r=space[head].cur;
        while(r){
            if(space[r].data==temp)break;
            pre=r;
            r=space[r].cur; 

        }
        if(!r){
            int t=mallocLocation(space);
            space[t].data=temp;
            space[t].cur=0;
            space[pre].cur=t;

        }else{
            space[pre].cur=space[r].cur;    
            freeSL(space,r);
        }
    }
}
void Reverse(SList& slist,int head){
    int p=slist[head].cur;

    while(p){
        printf("%d ",slist[p].data);
        p=slist[p].cur;
    }
}
int main(){
    SList space;
    int head;
    difference(space,head);
    Reverse(space,head);
    return 0;

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值