队列的顺序存储定义
typedef int Position;
typedef struct QNode * PtrToQNode;
struct QNode{
ElementType * Data;
Position Front,Rear;
int MaxSize;
};
typedef PtrToQNode Queue;
Queue CreateQueue(int MaxSize){
Queue Q=(Queue)malloc(sizeof(struct QNode));
Q->Data=(ElementType *)malloc(MaxSize * sizeof(ElementType));
Q->Front=Q->Rear=0;
Q->MaxSize=MaxSize;
return Q;
}
bool IsFull(Queue Q){
return ((Q->Rear+1)%Q->MaxSize==Q->Front);
}
bool AddQ(Queue Q,ElementType X){
if(IsFull(Q)){
printf("队列满!\n");
return false;
}
else{
Q->Rear=(Q->Rear+1)%MaxSize;
Q->Data[Q->Rear]=X;
return true;
}
}
bool IsEmpty(Queue Q){
return (Q->Front==Q->Rear);
}
ElementType DeleteQ(Queue Q){
if(IsEmpty(Q)){
printf("队列空\n");
return ERROR;
}
else{
Q->Front=(Q->Front+1)%Q->MaxSize;
}
return Q->Data[Q->Front];
}
}
应用:多项式加法
链表结构来存储多项式的非零项的实现方法。
每个链表结点存储多项式的一个非零项,包括系数和指数两个数据域,以及一个指针域
不带头节点的单向链表表示一元多项式按照指数递减的顺序排列。
搞两个指针p1,p2,初始化p1,p2分别指向这两个多项式的第一个结点,通过循环不断比较p1,p2指向的结点,比较结果为下列三种情况之一:
1.两数据项指数相同:
系数相加,若系数项不为0,则加进去,p1,p2都指向下一个多项式的下一项。
2.p1中的数据项指数较大,p2不变,p1的当前项存入结果多项式中,并使p1指向下一项
3.p2中的数据项指数较大,p1不变,p2的当前项存入结果多项式中,并使21指向下一项
int Compare(int e1,int e2){
if(e1>e2)
return 1;
else if(e1<e2)
return -1;
else
return 0;
}
void Attach(int coef,int expon,Polynomial * PtrRear){
Polynomial P;
P=(Polynomial)malloc(sizeof(struct PolyNode));
P->coef=coef;
P->expon=expon;
P->NULL;
(*PtrRear)->link=P;
*PtrRear=P;
}
ploynomial PolyAdd(Polynomial P1,Polynomial P2){
Polynomail front,rear,temp;
int sum;
rear=(Polynomial)malloc(sizeof(struct PolyNode));
front=rear;
while(P1&&p2){
switch(Compare(P1->expon,P2->expon)){
case 1:
Attach(P1->coef,P1->expon,&rear);
P1=P1->link;
break;
case -1:
Attach(P2->coef,P2->expon,&rear);
P2=P2->link;
break;
case 0:
sum=P1->coef+P2->coef;
if(sum)
Attach(sum,P1->expon,&rear);
P1=P1->link;
P2=P2->link;
break;
}
for(;P1;P1=P1->link)
Attach(P1->coef,P1->expon,&rear);
for(;P2;P2=P2->link)
Attach(P2->coef,P2->expon,&rear);
rear->link=NULL;
temp=front;
front=front->link;
free(temp);
return front;
}
}