資料結構 線性表

2021-09-28 14:54:04 字數 4299 閱讀 5855

佇列關於線性表的一些簡單的題目

用乙個**展示 算術表示式求值演算法對表示式

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...