³¤ÕûÊýµÄ´úÊý¼ÆËã - -Êý¾Ý½á¹¹¿Î³ÌÉè¼Æ

ÉòÑôº½¿Õº½Ìì´óѧ¿Î³ÌÉè¼Æ±¨¸æ

¸½ ¼£¨¹Ø¼ü²¿·Ö³ÌÐòÇåµ¥£©

#include \#include #include #include #include

#define LEN sizeof(struct Node) #define MAX 1000 #define OK 1 #define ERROR 0 #define OVERFLOW -1 #define TRUE 1 #define FALSE 0 typedef int Status; typedef struct Node { int data; struct Node *prior,*next; }Node,*NodeList;

int axp(int a,int k) //ÇóÖ¸Êýº¯ÊýÖµ { int r=1; if(k==0) return 1; for(;k>0;k--) r=r*a; return r; }

Status zhuanhuan(char str[],NodeList &oprh) //ÊäÈëת»»º¯Êý {//½«×Ö·û´®ÐÎʽµÄ²Ù×÷Êýת»»³ÉËùÐèµÄÀàÐÍ NodeList p; int i,k,buffer; k=buffer=0; oprh=(NodeList)malloc(LEN); oprh->next=oprh; oprh->prior=oprh; for(i=strlen(str)-1;i>=0;i--) { if((i!=0 || (str[0]!='-' && str[0]!='+'))&&(str[i]>'9' || str[i]<'0')) //ÅжÏÊäÈëÊÇ·ñºÏ·¨ return ERROR;

15

ÉòÑôº½¿Õº½Ìì´óѧ¿Î³ÌÉè¼Æ±¨¸æ

if(str[0]=='0' && str[1]!='\\0') return ERROR; if((str[0]=='-' || str[0]=='+') && str[1]=='0') return ERROR; if(str[i]!='-' && str[i]!='+') { buffer=buffer+(str[i]-'0')*axp(10,k); k++; if(k==4 || str[i-1]=='-' || str[i-1]=='+' || i==0) { p=(NodeList)malloc(LEN);//½«Ð½¨½áµã²åÈ뵽ͷ½áµãÖ®ºó oprh->next->prior=p; p->prior=oprh; p->next=oprh->next; oprh->next=p; p->data=buffer; buffer=k=0; } } } return OK; }

Status shuru(NodeList &opr1,NodeList &opr2,char str[])//ÊäÈ뺯Êý { int flag=OK;

printf(\ÇëÊäÈëµÚÒ»¸ö²Ù×÷Êý:\\n\ scanf(\ getchar(); flag=zhuanhuan(str,opr1); while(!flag) { printf(\ÕûÊýÊäÈëÓÐÎó£¬ÇëÖØÐÂÊäÈë:\\n\ scanf(\ getchar(); flag=zhuanhuan(str,opr1); } printf(\ÇëÊäÈëµÚ¶þ¸ö²Ù×÷Êý:\\n\ scanf(\ getchar(); flag=zhuanhuan(str,opr2); while(!flag) { printf(\ÕûÊýÊäÈëÓÐÎó£¬ÇëÖØÐÂÊäÈ룺\\n\

16

ÉòÑôº½¿Õº½Ìì´óѧ¿Î³ÌÉè¼Æ±¨¸æ

scanf(\ getchar(); flag=zhuanhuan(str,opr2); } return OK; }

//Êä³öº¯Êý

Status shuchu(NodeList oprr,char str[]) { Status initbuf(char str[]); NodeList p; int i,j,num[4]; if(!oprr) return ERROR; p=oprr; i=j=0; initbuf(str); p=p->next; if(p->next==oprr && p->data==0)//ÈôÒªÊä³öµÄÊýΪ0ÔòÖ´ÐÐ str[i++]='0'; else while(p!=oprr) { num[0]=p->data/1000; num[1]=(p->data-num[0]*1000)/100; num[2]=(p->data-num[0]*1000-num[1]*100)/10; num[3]=p->data-num[0]*1000-num[1]*100-num[2]*10; while(j<4) { if(num[j]!=0 || (str[0]=='-' && str[1]!='\\0')||(str[0]!='-' && str[0]!='\\0'))//´ËÅжÏÓï¾äÊÇΪÁ˱ÜÃâÊä³öÖîÈ磺00123¡­µÄÇé¿ö str[i++]=num[j]+'0';//????? j++; } p=p->next; j=0; } str[i]='\\0'; printf(\ printf(\ return OK; }

Status initbuf(char str[])//»º³åÇø²¿·Ö³õʼ»¯º¯Êý

17

ÉòÑôº½¿Õº½Ìì´óѧ¿Î³ÌÉè¼Æ±¨¸æ

{ int i; for(i=0;i<=10;i++) str[i]='\\0'; return OK; }

int cmplinklen(NodeList opr1,NodeList opr2) //±È½ÏÁ´±í³¤¶Èº¯Êý {//opr1Á´±Èopr2Á´³¤Ôò·µ»Ø1£¬¶ÌÔò·µ»Ø-1£¬ÏàµÈÔò·µ»Ø0 NodeList p1,p2; p1=opr1->prior; p2=opr2->prior; while(p1->prior!=opr1 && p2->prior!=opr2) { p1=p1->prior; p2=p2->prior; } if(p1->prior!=opr1) return 1; if(p2->prior!=opr2) return -1; return 0; }

int length(NodeList oprr) //ÇóÁ´±í³¤¶È { int count=0; NodeList p=oprr->next; while(p!=oprr) { count++; p=p->next; } return count; }

Status Creat(NodeList &oprr,int len) //Éú³ÉÖ¸¶¨³¤¶ÈÁ´±í { NodeList p; oprr=(NodeList)malloc(LEN); p=oprr; while(len>0) { p->next=(NodeList)malloc(LEN); p->next->data='?'; p->next->prior=p;

18

ÁªÏµ¿Í·þ£º779662525#qq.com(#Ìæ»»Îª@)