X
تبلیغات
علوم کامپیوتر - حل تمارین ساختمان داده

علوم کامپیوتر

علوم کامپیوتر و نرم افزار و سخت افزار و اصطلاحات روزمره زبان

حل تمارین ساختمان داده

جواب تمرین ۲ :

a = AB + C -

b = AB + CD - E $ * F *

c = ABC / + D +

d = ABCDE - * - -

e = AB + C / D +

 

f = AB - CDE + - *

g = AB + CD + * E -

h = ABCD + * + EF / G * - H +

i = AB + CD - / E + F* G -

جواب حل تمرین ۳

a = (a+b)*(c-d)

b = (a-(b+c))*d

c = a / ( b/(c/d))

d = ((a+b)-c)/(d*e)

e = ((a/b)/c)/d 

جواب حل ۴

a = 2

b = 4

c = 4

d = 16

e = 6  

جواب حل ۵

#include
int main(){
char A[100];
printf("\nPlease Enter a Mathematical Expression : ");
scanf("%s",A);
int p=0;
for(int i=0;A[i];i++){
if(A[i]=='(')
p++;
if(A[i]==')')
p--;
}
if(p==0)
printf("Parentheses Number is Correct ... ");
else
printf("Parentheses Number is Not Correct ... ");
return 0;
}

جواب حل ۶

#include
int A[100];
int top=-1;
void push(int x){
if(top<99)
A[++top]=x;
}
int pop(){
if(top>-1)
return A[top--];
return 0;
}
int isempty(){
if(top==-1)
return 1;
return 0;
}
void ReverseStack(){
int B[100];
int w=top;
for(int i=0;i<=w;i++)
B[i]=pop();
for(i=0;i<=w;i++)
push(B[i]);
}
int main(){
for(int i=1;i<30;i++)
push(i);
printf("Stack Before Reversing : \n");
for(i=0;i<=top;i++)
printf("%d\t",A[i]);
ReverseStack();
printf("\n\nStack After Reversing : \n");
for(i=0;i<=top;i++)
printf("%d\t",A[i]);
return 0;
}

 

حل تمرین ۷

#include
#include
#include
#define n 100
char A1[n][100];
char A[n];
int top=-1;
int front=0;
int rear=0;
void pushs(char*x){
if(topstrcpy(A1[++top],x);
}
char*pops(){
if(top>-1)
return A1[top--];
return 0;
}
int isfull(){
if(topreturn 0;
else
return 1;
}
int isempty(){
if(top>-1)
return 0;
else
return 1;
}
void StrInsertat(char*dest,char*string,int w){
char temp[100]="";
for(int i=0,k=0;dest[i] || i==w;i++){
if(i==w)
for(int j=0;string[j];j++)
temp[k++]=string[j];
temp[k++]=dest[i];
}
temp[k]=0;
strcpy(dest,temp);
}
void ClearString(char*string,int t){
for(int i=0;istring[i]=0;
}
char*postfix2infix(char*exp){
char temp[100]="";
char op[2]=" ";
for(int i=0;exp[i];i++){
if(exp[i]=='+'||exp[i]=='-'||exp[i]=='*'||exp[i]=='/'){
ClearString(temp,100);
temp[0]='(';
StrInsertat(temp,pops(),1);
op[0]=exp[i];
StrInsertat(temp,op,1);
StrInsertat(temp,pops(),1);
temp[strlen(temp)]=')';
pushs(temp);
continue;
}
op[0]=exp[i];
pushs(op);
}
return pops();
}
int isfullQ(){
if(front==(rear+1)%n)
return 1;
else
return 0;
}
int isemptyQ(){
if(rear==front)
return 1;
else
return 0;
}
char*delq(){
if(!isemptyQ()){
front=(front+1)%n;
return A1[front];
}
return 0;
}
char*peak1(){
if(!isemptyQ()){
return A1[(front+1)%n];
}
return 0;
}
char*peak2(){
if(!isemptyQ()){
return A1[(front+2)%n];
}
return 0;
}
void addq(char*x){
if(!isfull()){
rear=(rear+1)%n;
strcpy(A1[rear],x);
}
}
int oneelement(){
if((rear+1)%n-front==0||(front+1)%n==rear)
return 1;
return 0;
}
char*prefix2infix(char*prefix){
char temp[100]="";
char op[2]=" ";
for(int i=0;prefix[i];i++){
op[0]=prefix[i];
addq(op);
}
while(!oneelement()){
char exp[100];
char op1[100],op2[100];
strcpy(exp,delq());
strcpy(op1,peak1());
strcpy(op2,peak2());
if(exp[0]=='+'||exp[0]=='-'||exp[0]=='*'||exp[0]=='/'){
if((op1[0]!='+'&&op1[0]!='-'&&op1[0]!='*'&&op1[0]!='/')&&
(op2[0]!='+'&&op2[0]!='-'&&op2[0]!='*'&&op2[0]!='/')){
ClearString(temp,100);
temp[0]='(';
char x[100];
strcpy(x,delq());
op[0]=exp[0];
StrInsertat(temp,delq(),1);
StrInsertat(temp,op,1);
StrInsertat(temp,x,1);
temp[strlen(temp)]=')';
addq(temp);
}else{
addq(exp);
}
continue;
}
addq(exp);
}
return delq();
}
void push(char x){
if(top<99)
A[++top]=x;
}
char pop(){
if(top>-1)
return A[top--];
return 0;
}
char peak(){
if(top>-1)
return A[top];
return 0;
}
int priority(char x){
if(x=='#')
return 1;
if(x=='+' || x=='-')
return 2;
if(x=='*' || x=='/')
return 3;
return 0;
}
char* infix2postfix(char*infixexp){
char postfixexp[100];
push('#');
for(int i=0,k=0;infixexp[i];i++){
if(infixexp[i]=='('){
push('(');
continue;
}
if(priority(infixexp[i])){
while(priority(peak())>=priority(infixexp[i]))
postfixexp[k++]=pop();
push(infixexp[i]);
continue;
}
if(infixexp[i]==')'){
while(peak()!='(')
postfixexp[k++]=pop();
pop();
continue;
}
if(!priority(infixexp[i])){
postfixexp[k++]=infixexp[i];
continue;
}
}
while(peak()!='#')
postfixexp[k++]=pop();
postfixexp[k]=0;
return postfixexp;
}
char*StrReverse(char*string){
int t=strlen(string);
char result[100];
for(int i=0;iresult[i]=string[t-i-1];
result[i]=0;
return result;
}
char*infix2prefix(char*exp){
char infix[100];
strcpy(infix,StrReverse(exp));
for(int i=0;infix[i];i++)
if(infix[i]=='(')
infix[i]=')';
else if(infix[i]==')')
infix[i]='(';
strcpy(infix,infix2postfix(infix));
strcpy(infix,StrReverse(infix));
return infix;
}
char*prefix2postfix(char*exp){
char temp[100];
strcpy(temp,prefix2infix(exp));
return infix2postfix(temp);
}
char*postfix2prefix(char*exp){
char temp[100];
strcpy(temp,postfix2infix(exp));
return infix2prefix(temp);
}
int main(){
clrscr();
char exp[100]="/+abc";
printf("\n%s",prefix2postfix(exp));
strcpy(exp,"ab+c/");
printf("\n%s",postfix2prefix(exp));
return 0;
}

حل تمرین ۸

#include
#include
char A[100];
int top=-1;
void push(char x){
if(top<99)
A[++top]=x;
}
char pop(){
if(top>-1)
return A[top--];
return 0;
}
char peak(){
if(top>-1)
return A[top];
return 0;
}
int priority(char x){
if(x=='#')
return 1;
if(x=='+' || x=='-')
return 2;
if(x=='*' || x=='/')
return 3;
return 0;
}
int findPara(char*exp,int w){
int k=0;
for(int i=w;i>=0;i--){
if(exp[i]==')')
k++;
if(exp[i]=='(' && k==0)
return i;
if(exp[i]=='(')
k--;
}
return 0;
}
void removePara(char*exp,int w){
int k=0;
for(int i=w;exp[i];i++){
if(exp[i]=='(')
k++;
if(exp[i]==')')
k--;
if(k==0)
break;
}
for(int j=i;exp[j];j++)
exp[j]=exp[j+1];
for(j=w;exp[j];j++)
exp[j]=exp[j+1];
}
void RemoveaddPara(char*infixexp){
char postfix[100];
push('#');
for(int i=0,k=0;infixexp[i];i++){
if(infixexp[i]=='('){
push('(');
continue;
}
if(priority(infixexp[i])){
while(priority(peak())>=priority(infixexp[i]))
postfix[k++]=pop();
if(peak()=='('&&(infixexp[i]=='*'||infixexp[i]=='/'))
removePara(infixexp,findPara(infixexp,i));
push(infixexp[i]);
continue;
}
if(infixexp[i]==')'){
while(peak()!='(')
postfix[k++]=pop();
pop();
continue;
}
if(!priority(infixexp[i])){
postfix[k++]=infixexp[i];
continue;
}
}
while(peak()!='#')
postfix[k++]=pop();
postfix[k]=0;
}
void RemovefPara(char*exp){
if(exp[0]=='('){
int k=0;
for(int i=0;exp[i];i++){
if(exp[i]=='(')
k++;
if(exp[i]==')')
k--;
if(k==0)
break;
}
if(!exp[i+1]){
exp[i]=0;
exp[0]=0;
RemovefPara(exp+1);
}else
return;
}
}
int main(){
char infix[100];
printf("Please Enter A infix Expression.\nOperands Are characters and ( ) + - * / are allowed for operators.\n");
scanf("%s",infix);
RemovefPara(infix);
for(int i=0;!infix[i];i++);
strcpy(infix,infix+i);
RemoveaddPara(infix);
printf("The Infix Form After Removing Additional Parantheses : %s",infix);
return 0;
}

حل تمرین ۱۰

1 - استفاده در توابع بازگشتی

2-  ارزیابی عبارات محاسباتی

3 - الگوریتم مسیر حرکت msze

4 -  پیمایش عمقی درختها و گرافها

5 -  استفاده در روشهای مرتب سازی    quicksort    -    mergesort

 منبع:www.pcazar.com

+ نوشته شده در  Mon 22 Dec 2008ساعت 13:15  توسط معصومه فاضلی  |