Stack is a special kind of linear table
Stacks can only operate at one end of a linear table
Top: One end of the allowed operation
Bottom of Stack (Bottom): One end of operation is not allowed
StackCommon operations of
Creating stacks
Destroying stacks
Empty stack
Into the stack
Out of the stack
Get top of stack element
Get the size of the stack
The design and realization of C language description ====="accumulation of life wealth storehouse |
#ifndef _my_stack_h_ #define _my_stack_h_ typedef void Stack; Stack* stack_create (); void Stack_destroy (stack* Stack); void Stack_clear (stack* Stack); int Stack_push (stack* Stack, void* item); void* Stack_pop (stack* Stack); void* stack_top (stack* Stack); int stack_size (stack* Stack); #endif//_my_stack_h_ |
|
3.1.3analysis of relationship between stack model and linked list model
The basic concept of sequential storage design and implementation of stacks
Design and implementation
Header file |
#ifndef __my_seqlist_h__ #define __my_seqlist_ h__ Typedef void seqlist; Typedef void seqlistnode; Seqlist* seqstack_create (int capacity); Void seqstack _destroy (seqstack * list); Void seqstack _clear (seqstack * list); Int seqstack _length (seqstack * list); Int seqstack _capacity (seqstack * list); Int seqstack _insert (seqstack * list, seqlistnode* node, int pos); Seqlistnode* seqlist_get (seqlist* list, int pos); Seqlistnode* seqlist_delete (seqlist* list, int pos); #endif //__my_seqlist_h__ |
3.1.5design and implementation of chain storage for stacks
Design and implementation
Header file |
#ifndef _my_linkstack_h_ #define _my_linkstack_h_ typedef void Linkstack; Linkstack* linkstack_create (); void Linkstack_destroy (linkstack* stack); void Linkstack_clear (linkstack* stack); int Linkstack_push (linkstack* stack, void* item); void* Linkstack_pop (linkstack* stack); void* linkstack_top (linkstack* stack); int linkstack_size (linkstack* stack); #endif//_my_linkstack_h_ |
3.1.6Application of StacksCase1: Nearest Match
Application 1: Nearest Match |
Almost all compilers have the ability to detect if parentheses match How do I implement symbolic pair detection in the compiler? #include <stdio.h> int main () {int a[4][4]; int (*p) [4]; p = a[0]; return 0; |
Algorithm Ideas Start scanning from the first character Ignored when ordinary characters are met, Pressed into the stack when the left sign is met POPs the top symbol from the stack when the right symbol is met and matches Match succeeded: Continue reading into next character Match failed: Stop immediately, and error End: Successful : All characters are scanned and the stack is empty Failed: Match failed or all characters scanned but stack not empty |
When it is necessary to detect things that are not mutually adjacent You can use the "LIFO" feature of the stack Stacks are ideal for situations where you need a "near match" |
|
The essential work of a computer is to do mathematical arithmetic, and that computer can read into a string "9 + (3-1) * 5 + 8/2" and calculate the value? |
Case2: infix expressions and suffix expressions
Application 2: infix suffix |
The essential work of a computer is to do mathematical arithmetic, and that computer can read into a string "9 + (3-1) * 5 + 8/2" and calculate the value? |
Suffix expression = =? Compliant with computer operations Polish scientists have proposed a suffix expression that puts the operator behind the number in the decade. We are accustomed to the mathematical expression called infix expression = = ="In line with human thinking habits |
Instance: 5 + 4=> 5 4 + 1 + 2 * 3 = 1 2 3 * + 8 + (3–1) * 5 = 8 3 1–5 * + |
Infix expression conforms to human reading and thinking habits The suffix expression conforms to the computer's "operating Habits" How do I convert an infix expression to a suffix expression? |
infix suffix algorithm: |
Iterating through the numbers and symbols in an infix expression For numbers: Direct output For symbols: Left parenthesis: Into the stack Operational symbols: Precedence compared to top of stack symbols If the stack top symbol priority is low: this conforms to the stack (the default stack top if the opening parenthesis, the left parenthesis the lowest priority) If the stack top symbol priority is not low: the stack top symbol is ejected and output, and then into the stack Closing parenthesis: POPs the top of the stack and outputs it until it matches the opening parenthesis Traversal end: Eject and output all symbols in the stack infix suffix
How is the computer computed based on the suffix expression? 8 3 1 – 5 * + |
Traverse numbers and symbols in postfix expressions For numbers: Stack For symbols: Eject right operand from stack Eject left operand from stack Perform operations on symbols Press the result of the operation into the stack Traversal end: The only number in the stack is the result of the calculation
Stacks of magic! Infix expression is the expression of the human habit Suffix expression is the way the computer likes to express Convert infix form to suffix by using the stack The calculation process of infix expression is similar to the procedure of program compiling and running |
Extension: give you a string, calculation result "1 + 2 * (66 / (2 * 3) + 7 )" 1 String parsing Lexical parsing Precedence analysis Data structure selection === |
|
|
C Stack Stack