📄 新建 文本文档.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 + -