리스트(list)
- 하나의 연결 관계에 따라 자료들을 한 줄로 연결시킨 형태로 추상화된 자료구조이다.
- 자료 저장을 위해 메모리상의 연속된 공간을 할당해야 한다는 점에서 배열과 유사한 점이 있다.
- 자료들을 이동시킬 필요가 없이 연결관계만 재구성해 주면 되는 장점이 있다.
#include<stdio.h>
#include<list>
std::list<int>L;
void view(){
std::list<int>::iterator p;
for(p=L.begin(); p!=L.end(); p++)
printf("%d", *p); //*p: 정수 리스트의 p위치에 있는 값
printf("\n");
}
int main()
{
std::list<int>::iterator q;
for(int i=1; i<=3; i++)
L.push_back(i); // 마지막 원소 다음에 자료 i 삽입(연결)
view();
q = L.begin();
q++;
L.insert(q,4);
view();
L.push_back(5);
view();
q++;
L.erase(q);
view();
}
/*
123
1423
14235
1425
--------------------------------
Process exited after 0.02025 seconds with return value 0
계속하려면 아무 키나 누르십시오 . . .
*/
2. 스택(stack)
- 가장 나중에 입력된 자료에 가장 먼저 접근하고, 가장 먼저 저아도니 자료에는 가장 마지막에 접근하도록 설계된 후입선출(LIFO: Last In First Out) 형태로 추상화된 자료구조이다.
- 자료들을 쌓아 올리는 구조.
- 삽입삭제가 한곳에서만 이루어짐.
#include<stdio.h>
#include<stack>
std::stack<int>S; // 정수형 스택 S 선언
int main(){
for(int i=1; i<=3; i++)
{
S.push(i); //스택S의 가장 위에 i추가
}
for(int i=1; i<=2; i++)
{
printf("%d ", S.top()); //스택 S의 가장 위 자료값 출력
S.pop(); // 스택 S의 가장 위에 있는 자료 삭제
}
printf("\n");
S.push(4);
S.push(5);
while(!S.empty()){ // 스택S가 비어있지 않는 동안
printf("%d ", S.top());
S.pop(); //
}
printf("\n");
}
/*
3 2
5 4 1
--------------------------------
Process exited after 0.02122 seconds with return value 0
계속하려면 아무 키나 누르십시오 . . .
*/
std::stack<int>S;
<stack>을 참조하여 스택을 선언하기 위해서 std::stack<스택에 저장될 자료형>스택이름; 을 사용
3. 큐(queue)
- 먼저 입력된 자료에 가장 먼저 접근하고, 가장 나중에 저장된 자료에는 가장 마지막에 접근하도록 선입 선출(FIFO: Fisrt In, First Out) 형태로 추상화된 자료구조이다.
#include<stdio.h>
#include<queue>
std::queue<int>Q;
int main()
{
for(int i=1; i<=3; i++)
{
Q.push(i);
}
for(int i=1; i<=2; i++)
{
printf("%d ", Q.front()); //가장 처음값 출력
Q.pop();
}
printf("\n");
Q.push(4);
Q.push(5);
while(!Q.empty()){
printf("%d ", Q.front());
Q.pop();
}
printf("\n");
}
/*
1 2
3 4 5
--------------------------------
Process exited after 0.01674 seconds with return value 0
계속하려면 아무 키나 누르십시오 . . .
*/
큐에 저장된어 있는 값을 확인하기 위해서는 큐에 저장된어 있는 값을 순서대로 꺼내면서 확인해 보아야 함.