zoukankan      html  css  js  c++  java
  • 静态链表

    #include <iostream>
    #include <stdio.h> 
    #include <stdlib.h>
    #define MAXSIZE 1000 //链表的最大长度
    typedef float ElemType;//定义float的别名
    typedef int Status;//定义int的别名 
    typedef struct{
    	ElemType data;
    	Status cur;//游标 
    }component,SLinkList[MAXSIZE]; 
    //函数的声明
    Status LocateElem_SL(SLinkList S,ElemType e);//在表中查找 
    void InitSpace_SL(SLinkList &space);//将一个数组初始化为一个链表 
    Status Malloc_SL(SLinkList &space);//取一个节点 
    void Free_SL(SLinkList &space,Status k);//将空闲节点链接在备用链表上
    void difference(SLinkList &space,Status &S);//(A-B)U(B-A);
    
    Status LocateElem_SL(SLinkList S,ElemType e)//在表中进行查找 
    {
    	Status i;
    	//在静态单链线性表中L查找第一个值为e的元素
    	//若找到则返回他在L中的位序,否则返回0
    	i=S[0].cur;//表示第一个节点 
    	while(i!=0&&S[i].data!=e)
    	{
    		i=S[i].cur;//相当于p=p->data;向后移动 
    	}
    	return i;
    } 
    void InitSpace_SL(SLinkList &space)//将一个数组初始化为一个链表 
    {
    	//将一维数组space中个分量链成一个备用链表,space[0].cur为头指针
    	//0表示空指针
    	Status i;
    	for(i=0;i<MAXSIZE-1;i++)
    	{
    		space[i].cur=i+1;
    	} 
    	space[MAXSIZE-1].cur=0;//尾指针后面不指向任何东西所以设为 0
    }
    Status Malloc_SL(SLinkList &space)//取一个节点 
    {
    	Status i;
    	//若备用空间链表非空,则返回分配的节点下标,否则返回0
    	i=space[0].cur;
    	if(space[0].cur!=0)
    	{
    		space[0].cur=space[i].cur;	
    	} 
    	return i;
    } 
    void Free_SL(SLinkList &space,Status k)//将空闲节点链接在备用链表上 
    {
    	//将下标为k的空闲节点回收到备用链表中
    	space[k].cur=space[0].cur;
    	space[0].cur=k;
    } 
    void difference(SLinkList &space,Status &S)
    {
    	Status i,j,m,n,r,p,k; 
    	ElemType b;
    	//依次输入集合A和B的元素,在一维数组space中建立表示集合(A-B)U(B-A)
    	//的静态链表S为其头指针假设备用空间足够大space[0].cur为头指针 
    	InitSpace_SL(space);//初始化备用空间
    	S=Malloc_SL(space);//生成S的头结点
    	r=S;//r指向S的当前最后节点
    	scanf("%d%d",&m,&n); //输入A和B的元素个数
    	for(j=1;j<=m;j++)//建立集合A的链表 
    	{
    		i=Malloc_SL(space);//分配节点
    		scanf("%f",&space[i].data);//输入A的元素值
    		space[r].cur=i;//插入表尾 
    		r=i; 
    	} 
    	space[r].cur=0;//尾节点的指针为空
    	for(j=1;j<=n;j++)//依次输入B的元素若在A中则删除若不在A中则插入 
    	{
    		scanf("%f",&b);//k指向集合A中的第一个节点 
    		p=S;
    		k=space[S].cur;
    		while(k!=space[r].cur&&space[k].data!=b)//在当前表中查找 
    		{
    			p=k;
    			k=space[k].cur; 
    		}
    		if(k==space[r].cur)//当前表中不存在该元素插入在r所指的节点之后且r的位置不变 
    		{
    			i=Malloc_SL(space);
    			space[i].data=b;
    			space[i].cur=space[r].cur;
    			space[r].cur=i;
    		}
    		else//若表中已存在该元素删除之 
    		{
    			space[p].cur=space[k].cur;
    			Free_SL(space,k);
    			if(r==k)
    			{
    				r=p;//若删除的是r所指的节点,则修改尾指针 
    			}
    		}
    	} 
    	
    }
    
    int main(int argc, char** argv) 
    {
    	SLinkList space;
    	Status s=0;
    	difference(space,s);
    	for(s=2;s<8;s++)//好进行测试输入6个数 
    	{
    		printf("%4.2f ",space[s].data);
    	}
    	return 0;
    }
    别废话,拿你代码给我看。
  • 相关阅读:
    解决silverlight中“跨线程访问无效”错误
    VS 制作自定义安装程序
    SQL Server 2005开窗函数的使用
    主要邮件服务器地址
    sql数据库的备份还原操作出现的常见问题
    先安装ArcGIS9.3 后VS2008 出现的问题
    无法启动调试 未安装silverlight developer 运行时 解决办法
    SQL中ROW_NUMBER()的使用
    运用PMI主义
    Understanding the error message: “Login failed for user ''. The user is not associated with a trusted SQL Server connect
  • 原文地址:https://www.cnblogs.com/lvxueyang/p/13707584.html
Copyright © 2011-2022 走看看