佇列關於線性表的一些簡單的題目
用乙個**展示 算術表示式求值演算法對表示式
10-2.5×(5-1.5×2)
計算的操作過程(包括表示式讀取、運算子棧和運算元棧的狀態、操作等步驟)。
答:#10-2.5×(5-1.5×2)#
步驟optr棧
opnd棧
輸入字元
主要操作1#
10-2.5×(5-1.5×2)#
push(opnd,』10』)2#
10-2.5×(5-1.5×2)#
push(optr,』-』)3#-
102.5×(5-1.5×2)#
push(opnd,』2.5』)4#-
10 2.5
×(5-1.5×2)#
push(optr,』×』)
5#-×
10 2.5
(5-1.5×2)#
push(optr,』(』)
6#-×(
10 2.5
5-1.5×2)#
push(opnd,』5』)
7#-×(
10 2.5 5
-1.5×2)#
push(optr,』-』)
8#-×(-
10 2.5 5
1.5×2)#
push(opnd,』1.5』)
9#-×(-
10 2.5 5 1.5
×2)#
push(optr,』×』)
10#-×(-×
10 2.5 5 1.5
2)#push(opnd,』2』)
11#-×(-×
10 2.5 5 1.5 2
)#operate(『1.5』,』×』,』2』)
12#-×(-
10 2.5 5 3
)#operate(『 5』,』-』,』3』)
13#-×(
10 2.5 2
)#pop(optr)
14#-×
10 2.5 2
#operate(『5.5』,』×』,』2』)
15#-
10 5
#operate(『 10』,』-』,』5』)16#
5#return(gettop(opnd))
**如下:
number exp_calculation
else
'=':
'>':}
}return
pop(sn)
;}
編寫乙個實現算術四則運算表示式計算的程式。設輸入表示式是合法的,可含括號,運算元為正實數
#include
#include
#include
#define maxsize 100
//將算術表示式str轉化為字尾表示式exp
void
transfrom
(char str,
char exp)
opr;
char ch;
int i=
0,t=0;
//i為str下標,t為exp下標
opr.top =-1
;//初始化top值為-1
ch = str[i]
;//逐個讀取字串中的字元
i++;while
(ch !=
'\0'
)//str表示式未掃瞄完時
opr.top--
;//將左括號刪除
break
;case
'+':
//運算子為加號或減號
case
'-':
while
(opr.top !=-1
&& opr.data[opr.top]
!='('
) opr.top++
; opr.data[opr.top]
=ch;
break
;case
'*':
//運算子為加號或減號或乘方號
case
'/':
case
'^':
while
(opr.data[opr.top]
=='*'
|| opr.data[opr.top]
=='/'
|| opr.data[opr.top]
=='^'
) opr.top++
; opr.data[opr.top]
=ch;
break
;case
' ':
//過濾空格
break
;default
:while
(ch >=
'0'&& ch <=
'9'|| ch ==
'.')
//字元為數字的時候
i--; exp[t]
='#'
;/*用#標示乙個數值串結束*/
t++;}
ch=str[i]
; i++;}
while
(opr.top !=-1
) exp[t]
='\0'
;/*給exp表示式新增結束標示*/
}//計算字尾表示式
float
compvalue
(char exp)
st;char ch;
float d1,d2;
double p1;
int t=
0,flag=
1,i,count;
/*t作為exp的下標*/
st.top=-1
; ch = exp[t]
; t++
;while
(ch !=
'0')
st.top--
;break
;case
'^':
p1 =
pow(st.data[st.top-1]
,st.data[st.top]);
/*呼叫pow子函式進行乘方運算*/
st.data[st.top-1]
=(float
)p1;
st.top--
;break
;default
: d1=0;
/*將數字字元轉換成對應的數值存放到d1中*/
flag=1;
d2=0;
while
(ch >=
'0'&& ch <=
'9'&& flag)
/*判定為數字字元*/
if(flag ==0)
for(i =
1;i < count;i++)}
d1 +
= d2;
st.top++
; st.data[st.top]
= d1;
} ch = exp[t]
; t++;}
return st.data[st.top];}
intmain()
有6個元素a, b, c, d, e, f依次入棧,出棧後進入乙個佇列,若出隊序列是c, b, d, f, e, a,試分析棧空間至少應能容納幾個元素。
答:棧空間至少能容納3個元素。根據出隊的順序,由佇列先進先出的特點可以判斷入隊的順序為c, b, d, f, e, a,由此可以推斷出入棧和出棧的順序:
進棧出棧
入隊出隊
aa->b
a->b->c
a->bcc
abbc
a->dba
dda->e
da->e->f
a->eff
aeef
aaea
假設以大小為m(即下標0…m-1)的陣列queue儲存迴圈佇列,同時設變數rear和queuelen分別指示迴圈佇列中隊尾元素的位置和隊長。試給出此迴圈佇列的隊空和隊滿條件,寫出相應的入隊和出隊演算法。
答:隊空:rear=front,queuelen=0;
隊滿:(rear+1)% m=front,queuelen=m;
入隊**:
status enqueue
(sqqueue &q,qelemtype e)
出隊**:
status dequeue
(sqqueue &q,qelemtype e)
資料結構(線性表)
1.試寫一演算法,在無頭結點的動態單鏈表上實現線性表操作insert l,i,b 並和在帶頭結點的動態單鏈表上實現相同操作的演算法進行比較。status insert linklist l,int i,int b 在無頭結點鍊錶l的第 i個元素之前插入元素 belse insert 2.已知線性表中...
資料結構 線性表
參考 一 線性表 順序表 單鏈表 迴圈鍊錶 雙鏈表 順序表 1.表的初始化 void initlist seqlist l 2.求表長 int listlength seqlist l 3.取表中第i個結點 datatype getnode l,i 4.查詢值為x的結點 5.插入 具體演算法描述 v...
資料結構 線性表
線性表是最基礎的一種資料結構,這樣的資料物件包含的資料元素具有一對一的前驅後繼關係。按其邏輯儲存方式的不同可分為兩類線性表 順序表和鏈式表。其中鏈式表又可分為線性鍊錶 迴圈鍊錶和雙向鍊錶。下面分別介紹下這幾種線性表的資料結構 1.順序表 typedef struct sqlist 插入演算法 i到n...