본문 바로가기
학과 공부/자료구조

DAY3

by sonysame 2016. 9. 13.

-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는 거꾸로


'학과 공부 > 자료구조' 카테고리의 다른 글

DAY5  (0) 2016.09.27
DAY4  (0) 2016.09.20
Day3  (0) 2016.09.08
DAY2  (0) 2016.09.06
DAY 1  (0) 2016.09.01