⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 新建 文本文档.txt

📁 小型对delphi编译器包括语法语义及词法
💻 TXT
字号:
//LinkList.h
#include<iostream.h>
#include<stdlib.h>

#define TRUE  1
#define FALSE -1
#define EQUAL    0
#define ERROR 0


struct element
{
   short int BigNum;    
};

typedef  struct element ElemType;

struct  Node                 
{   
    ElemType  data;
    Node   *  next;
	Node   *  prior;
};
typedef  struct Node *PNode;  // 结点指针类型 
typedef  struct Node *Link;  

typedef  struct               //链表类型
{
	Link head,tail;           //分别指向线性链表的头结点和最后一个结点
	int len;                  //指示线性链表中的数据元素的个数
}LinkList;
 
struct BitNode
{	
	 PNode  CruNode;
	 BitNode *lchild,*rchild;
};
typedef struct BitNode *BNode;
typedef LinkList BigInteger;
PNode NextPos(LinkList lList, PNode p);
int  Del( LinkList &lList, ElemType x );
PNode PriorPos(LinkList lList, PNode p);

Link MakeNode(ElemType e)     //分配结点存储空间,且结点值等于e。成功则返回指针,否则返回NULL
{
	PNode p = new Node;
	if(!p) exit(NULL);
	p->data = e;
	p->next = NULL;
	return p;
}

void FreeNode(Link p)        
{
	free(p);
}

LinkList  InitList( void )    
{
    LinkList lList;    
    lList.head = new Node;      
    if(!lList.head) exit(NULL);
    lList.head->next = NULL;   
	lList.head->prior=NULL;
	lList.tail = lList.head;
	lList.len  = 0;
    return (lList);
}
 
BigInteger InsFirst(LinkList &lList, ElemType e)  
{
	PNode s=new Node;s->data=e;
	if(lList.len == 0){
		s->next=NULL;
		s->prior=lList.head;
		lList.head->next=s;
		lList.tail = s; 
		}
	else{
	s->next=lList.head->next;
	lList.head->next->prior=s; 
	s->prior=lList.head;
	lList.head->next=s;
    }
	lList.len++;
	return lList;	
}
BigInteger InsLast(LinkList &lList, ElemType e)   
{
	//if(lList.head == NULL) return NULL;
	PNode s=new Node;s->data=e;
	lList.tail->next=s;
	s->prior=lList.tail;
	s->next=NULL;
	lList.tail = s;
	lList.len++;
	return lList;
}
BigInteger  DelLast( LinkList &lList)
{
	PNode s=new Node;
	s=lList.tail;
	lList.tail=lList.tail->prior;
	lList.tail->next=NULL;
	s->next=NULL;
	s->prior=NULL;
	free(s);
	lList.len --;
	return lList;
}

PNode  GetHead( LinkList lList )   //获取链表的第一个结点的指针,不是指头结点
{
	if(lList.head == NULL)return NULL;
	return lList.head->next;
}

int  IsNullList( LinkList lList)  // 判断lList带有头结点的单链表是否是空链表
{   
   if (lList.head == NULL)return(TRUE);
    return (lList.head->next == NULL);
}

//已知指针p指向线性链表中的一个结点,返回p所指结点的直接前驱的位置。
//若无前驱,则返回NULL;如果p值或lList本身为NULL,则返回NULL
PNode PriorPos(LinkList lList, PNode p)
{
	if(lList.head == NULL || p == NULL || p==lList.head) return NULL;
	PNode q = lList.head;
	while(q->next != NULL && q->next != p) q=q->next;
	if(q->next == p) return q;
	return NULL;
}


PNode NextPos(LinkList lList, PNode p)
{
//	if(lList.head == NULL || p == NULL || p==lList.tail)return NULL;
    return p->next;
}

ElemType GetCurElem(PNode p) //已知p指向线性链表中的一个结点,返回p所指结点中数据元素的值
{
	if(!p) exit(NULL);
	return p->data;
}

void DelFirst(LinkList &lList)
{
	PNode p;
	p=lList.head->next;
	if(lList.head->next->next!=NULL)
	{
		lList.head->next=p->next;
		p->next->prior=lList.head;
		free(p);
	}
	else
	{
		lList.head->next=NULL;
		lList.tail=lList.head;
		free(p);
	}
	lList.len--;

}
int CompareInteger(BigInteger Pa, BigInteger Pb) 
{
	PNode q,p;q=Pa.head;p=Pb.head;
	{
		if(Pa.len>Pb.len) return TRUE;
		else if(Pa.len <Pb.len ) return FALSE;
		else{	q= NextPos(Pa,q);p=NextPos(Pb,p);
		 while(q)
		{	
			if(q->data.BigNum>p->data.BigNum)
				return TRUE;
			else if(q->data.BigNum<p->data.BigNum)
				return FALSE;
			q= NextPos(Pa,q);p=NextPos(Pb,p);
			
		}
		}return EQUAL;
	}
	
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -