Stack < == > Stack och Kö Y s t M A p 1 Stack, specifikation En lista med element av typen T. Samtliga operationer utförs endast på listans ena ände, top. Stack() post: stacken är tom 2 Kö == > Y s t M A p == > Dubbeländad Kö (Deueue) <== > Y s t M A p <== > Prioritetskö == > t s p Y M A == > ~Stack() post: stacken är raderad void Push(T e) post: elementet med värdet e finns vid positionen top. void Pop() pre: stacken är inte tom post: Det element som fanns vid stackens top är raderat. Nästa element i stacken är vid toppen. T Top() const pre: stacken är inte tom post: En kopia av de värde som finns vid stackens top har returnerats. Stacken är oförändrad. post: true är returnerad om stacken är tom, i annat fall returneras false
Kö, specifikation En lista med element av typen T. Insättningar av värden utförs endast på listans ena ände, rear. Övriga operationer utförs på listans andra ände, front. Queue() ~Queue() void Enueue(T e) post: elementet med värdet e finns vid positionen rear. void Deueue() post: Det element som fanns vid köns front är raderat. Elementet som följde efter det borttagna element finns nu i köns front. T Front() const post: En kopia av de värde som finns vid köns front har returnerats. Kön är oförändrad. 3 Dubbeländad kö, specifikation En lista med element av typen T. kan endast utförs på listans ändar, head och tail. Deueue() ~Deueue() T RetrieveHead() post: En kopia av de värde som finns vid köns front har returnerats. Kön är oförändrad. T RetrieveTail() post: En kopia av de värde som finns vid köns tail har returnerats. Kön är oförändrad. void InsertHead(T e) post: elementet med värdet e finns vid positionen head. void InsertTail(T e) post: elementet med värdet e finns vid positionen tail. void DeleteHead() post: Det element som fanns vid köns head är raderat. Elementet som följde efter det borttagna element finns nu i köns head. void DeleteTail() post: Det element som fanns vid köns tail är raderat. Elementet som fanns före det borttagna element finns nu i köns tail. 4
Prioritetskö, specifikation 5 Infix, postfix och prefix notation 6 En mängd av positioner med värden av typen T. Positionerna är linjärt ordnade i prioritetsföljd efter den prioritet varje värde har. PriorityQueue() ~PriorityQueue() void Insert(T e) post: elementet med värdet e finns nu i kön T DeleteMin() post: elementet med det minsta värdet är borttaget ur kön. Elementet har returnerats Exempel 1 Infix: A + B Prefix: + A B Postfix: A B + Exempel 3 Infix: (A + B) * C Prefix: * + A B C Postfix: A B + C * Exempel 2 Infix: A + (B * C) Prefix: + * B C A Postfix: A B C * + Exempel 4 Infix: (A + B) * ( C - D) Prefix: * + A B - C D Postfix: A B + C D - *
Egenskaper 7 Beräkning av uttryck i postfix notation 8 Prefix notation Operanderna i uttrycket behandlas i samma ordning som i motsvarande infix-uttryck Parenteser behövs inte long Evaluate_Postfix(TList<Token> post) TStack<Token> eval; while (any tokens remain in post) Token t; Remove a token, t, from the head of post; Postfix notation Operanderna i uttrycket behandlas i samma ordning som i motsvarande infix-uttryck Parenteser behövs inte Ett postfix uttryck är inte det omvända prefix-uttrycket! if (t is a number token) eval.push(t); else long topnum = eval.top(); eval.pop(); long nextnum = eval.top(); eval.pop(); Evaluate answer = nextnum t topnum; eval.push(answer); return eval.top();
Kö implementerad med hjälp av ringbuffert 9 front = (1 + front) % size rear = (1 + rear) % size Kön är tom front och rear pekar på samma element Kön är halvfull front pekar på det första elementet i kön rear pekar på det första lediga elementet efter det sist insatta elementet Kön är full rear är strax bakom front. Sista elementet får inte användas. Ty i så fall förfaller kön att vara tom!