-Virtual memory and pointer
int a;//external
int main()
{
int b;//auto(지역변수)
f(&b);
}
int f(int *);
{
int c;//auto
static int d;//static
*p=100;
}
code-하드웨어에
data-a,d; 하드웨어에
stack-프로그램이 실행될때만 있다가 사라짐
c-f끝나면 사라짐
p-f끝나면 사라짐,b의 주소 저장
b-main끝나면 사라짐,여기에 100이 들어가게 된다.
heap-프로그램이 실행될때만 있다가 사라짐
main()
{
int a[10];
f(a);
}
f(int p[])//얘도 포인터 변수==int *p
{
p[2]=20;==*(p+2)==20;
}
배열이름은 포인터 상수
a[i][j]
==*(a[i]+j)
==*(*(a+i)+j+)
f(int p[][20])
{
p[3][4]=5;
}
ADT(Abstrat Data Type) Stack
FILO
-objects: a finite ordered list of elements
-functions
+Stack Create(max_size)
+Boolean IsFull(stack *s)
+Boolean IsEmpty(stack *s)
+Boolean Push(stack *s, Element in)
+Boolean Pop(stack *s, Element *out)
<Implementation>
//Stack Create(100)
typedef struct
{
int item[100];
int top=-1;
}Stack;
Stack S;
boolean IsFull(Stack *S)
{
return S->top==99;//*S.top==S->top
}
boolean IsEmpty(Stack *S)
{
return S->top <0;
}
boolean Push(Stack *S, int in)
{
if (IsFull(S)==true)return false;
S->item[++S->top]=in;
return true;
}
ex)Push(&S1,100);
boolean Pop(stack *S, int *out)
{
if (IsEmpty(S)=true) return false;
*out=S->item[S->top--];
return true;
}
Expression
3+4
3은 operand
+은 operator
infix
(((a/b)-c)+(d*e))-(a*c)
postfix
ab/c-de*+ac*-
((a/b)-c)
ab/c-
prefix
-+-/abc*de*ac
ab/c-de*+ac*-
b
a
연산자를 만나면 a랑 b를 pop하고 다시 stack에 넣어준다.
c 는 operand니까 다시 push
a/b
연산자 만나면 최상위 두개를 pop해주고 연산값을 다시 stack에 넣어준다.
e
d
a/b-c
d*e
a/b-c
a*c
a/b-c+d*e
a/b-c+d*e-a*c
여기까지 postfix
prefix는 거꾸로