当前位置:首页 > 北京科技大学数据结构试验报告(附录含代码)汇编
学习-----好资料
r->next=NULL; //将尾节点的指针域置空 return H; //返回已创建的头节点 }
List Adjmax(List H) //比较相邻两数之和
{ //返回相邻两数之和最大的第一个数指针 List p,r,q; int sum=0; p=H->next; if(H->next ==NULL) //判断是否为空 { printf(\ q=(List)malloc(sizeof(list)); q->data =0;
}
while(p!=NULL) //比较相邻两数之和 { r=p->next ; if(p&&r) if(r->data+p->data>sum) { q=p; sum=r->data +p->data ;}//不断赋给sum新的最大值 else; p=p->next ; } return q; }
int main() { char ch; printf(\请输入整形数据,以空格隔开,0结束。/// \\n\ printf(\ \\nY/N (enter 'y' or 'Y' to continue) \\n\ while(scanf(\ {
List H,pmax; H=Creatlist(); pmax=Adjmax(H);
printf(\相邻两数之和最大的第一个数为:%d\\nContinue? Y/N free(H); scanf(\ }
return 0;
}
更多精品文档
\ 学习-----好资料 实验二:
#include
typedef struct node //栈节点类型 { char data; //存储一个栈元素 struct node *next; //后继指针 }snode,*slink;
int Emptystack(slink S) //检测栈空 { if(S==NULL) return(1); else return(0); }
char Pop(slink*top) //出栈 { char e; slink p; if(Emptystack(*top)) return(-1); //栈空返回 else { e=(*top)->data; //取栈顶元素 p=*top; *top=(*top)->next; //重置栈顶指针 free(p);return(e); } }
void Push(slink*top,char e) //进栈 { slink p; p=(slink)malloc(sizeof(snode)); //生成进栈p节点 p->data=e; //存入元素e p->next=*top; //p节点作为新的栈顶链入 *top=p; }
void Clearstack(slink*top) //置空栈 { slink p; while(*top!=NULL) { p=(*top)->next; Pop(top); //依次弹出节点直到栈空 *top=p; } *top=NULL; 更多精品文档
学习-----好资料 }
char Getstop(slink S) //取栈顶 { if(S!=NULL)return(S->data); return(0); }
//符号优先级比较
int Precede(char x,char y) //比较x是否\大于\{ switch(x) { case '(':x=0;break; case '+': case '-':x=1;break; case '*': case '/':x=2;break; default: x=-1; } switch(y) { case '+': case '-':y=1;break; case '*': case '/':y=2;break; case '(':y=3;break; default: y=100; } if (x>=y)return(1); else return(0); }
//中后序转换
void mid_post(char post[],char mid[])//中缀表达式mid到后缀表达式post的转换的算法 { int i=0,j=0; char x;
slink S=NULL;//置空栈 Push(&S,'#');//结束符入栈 do { x=mid[i++];//扫描当前表达式分量x switch(x) { case '#': { while(!Emptystack(S)) post[j++]=Pop(&S);
更多精品文档
学习-----好资料 }
}break; case ')': { while(Getstop(S)!='(') post[j++]=Pop(&S);//反复出栈直至遇到'(' Pop(&S);//退掉'(' }break; case '+': case '-': case '*': case '/': case '(': { while(Precede(Getstop(S),x))//栈顶运算符(Q1)与x比较 post[j++]=Pop(&S);//Q1>=x时,输出栈顶符并退栈 Push(&S,x);//Q1 }while(x!='#'); post[j]='\\0'; //后缀表达式求值 int postcount(char post[])//后缀表达式post求值的算法 { int i=0; char x; float z,a,b; slink S=NULL;//置栈空 while (post[i]!='#') { x=post[i];//扫描每一个字符送x switch(x) {case '+':b=Pop(&S);a=Pop(&S);z=a+b;Push(&S,z);break; case '-':b=Pop(&S);a=Pop(&S);z=a-b;Push(&S,z);break; case '*':b=Pop(&S);a=Pop(&S);z=a*b;Push(&S,z);break; case '/':b=Pop(&S);a=Pop(&S);z=a/b;Push(&S,z);break;//执行相应运算结果进栈 default:x=post[i]-'0';Push(&S,x);//操作数直接进栈 } i++; } if (!Emptystack(S))return(Getstop(S));//返回结果 } void main() { char post[255],mid[255]=\ printf(\请输入要处理的中缀表达式:\\n\更多精品文档
共分享92篇相关文档