• 静态链表


    #include<stdio.h>
    #define MAXSIZE 100
    typedef struct 
    {
    	int data;
    	int cur;
    }sqllist;
    void init(sqllist p[])        //数组空间初始化为链表 ,p[0].cur为头指针 
    {
    	int i;
    	for(i=0;i<MAXSIZE-1;i++)
    	{
    		p[i].cur=i+1; 
    	}
    	p[MAXSIZE-1].cur=0;
    }
    
    int Malloc_p(sqllist p[])   //分配空闲节点,返回空闲节点的下标 
    {
    	int i;
    	i=p[0].cur;
    	if(i) p[0].cur=p[i].cur; 
    	return i;
    } 
    
    void delete_p(sqllist p[],int i)  //回收第i个元素 到空闲链表,一般是头指针后一个节点 
    {
    	p[i].cur=p[0].cur;
    	p[0].cur=i;
    } 
    
    int difference(sqllist p[])
    {
    	int i,s,end,m,n;
    	init(p);
    	s=Malloc_p(p);      //头结点
    	end=s;             //指向最后一个节点
    	scanf("%d%d",&m,&n);
    	for(i=1;i<=m;i++)
    	{
    		int t=Malloc_p(p);
    		scanf("%d",&p[t].data);
    		p[end].cur=t;
    		end=t;
    	} 
    	p[end].cur=0;
    	int b,j,k,u;
    	for(i=1;i<=n;i++)
    	{
    		scanf("%d",&b);
    		k=p[s].cur;
    		u=s;
    		while(k!=p[end].cur && p[k].data!=b)
    		{
    			u=k;
    			k=p[k].cur;
    		}
    		if(k==p[end].cur)    //不存在元素 
    		{
    			int t=Malloc_p(p);
    			p[t].data=b;
    			p[t].cur=p[end].cur;
    			p[end].cur=t;
    		}                
    		else             //若存在,则删除之 
    		{
    			p[u].cur=p[k].cur;
    			delete_p(p,k);
    			if(k==end) end=u;
    		}  
    	}
    	return s;
    }
    void print_sl(sqllist p[],int start){
    	int t=p[start].cur;
    	while (t)
    	{
    		printf("%d ",p[t].data);
    		t=p[t].cur;
    	}
    	printf("
    ");
    }
    int main(void)
    {
    	int start,i;
    	sqllist t[MAXSIZE];
    	start=difference(t);
    	print_sl(t,start);
    	//for(i=2;i<9;i++)
    	//printf("%d ",t[i]);
    } 

    非学无以广才,非志无以成学! 【Magic_chao

  • 相关阅读:
    第五天站立会议记录
    第四天站立会议
    第三天站立会议
    第二天站立会议
    冲刺会议第三天
    冲刺会议第二天
    团队建议总结
    第二次冲刺第一天
    项目总结(09)
    第七天站立会议
  • 原文地址:https://www.cnblogs.com/logo-88/p/9649217.html
Copyright © 2020-2023  润新知