본문 바로가기

CS/자료구조

순차 자료 구조

1) 배열

- 배열이란? 같은 형의 자료를 여러 개 저장할 수 있는 자료형으로 순서가 있는 원소들의 모임

- 배열의 원소 : 기본 자료형, 참조형을 가진 자료


- 배열의 생성

int intarray[];

int[] intarray2;

char chararray[];


- 배열 객체 생성 예

intarray = new int[3];

int[] L = {1,2,3,4,5,6};

int[] month = new int[12]; 


- 배열 a와 배열 b의 각 원소를 더하여 배열 c에 저장하고 각 배열의 원소 출력 프로그램


- 실행 결과


2) 행렬

- n개의 행과 m개의 열로 행렬을 구성할 때, n × m 으로 표현

- 행렬의 총 원소 수는 n * m 개

- 정방 행렬(square matrix) : n과 m이 같은 것

- 희소 행렬(sparse matrix) : 전체 원소 수에 비해 실제로 값을 사용하는 원소 수가 아주 적은 행렬


3) 선형 리스트(or 순서 리스트)

- 순서를 가진 원소들의 열


- 리스트가 공백인지 검사하는 연산

public boolean isEmpty( ) {

return no == -1;        // no가 -1일 때 공백 리스트

}


- 리스트에 원소를 삽입하는 연산

public void insert( int x ) {        // 리스트에 원소 삽입

int pos = 0;

if (no == size-1) {

size += increment;        // 배열 크기 확장

int[ ] tempArray = new int[size];

for( int i = 0; i <= no; i++ )        // 새로운 배열로 원소 이동

tempArray[i] = itemList[i];

itemList = tempArray;        // 참조 변수를 조정

}

if (no == -1){

no++;

itemList[no] = x;

}

else{

for( int i = 0; i <= no; i++ )        // 삽입 위치 결정

if ( x > itemList[i])

pos++;

for( int i = no+1; i > pos; i-- )        // 기존 자료 이동

itemList[i] = itemList[i-1];

itemList[pos] = x;

no++;

}

}


- 리스트에 있는 원소를 삭제하는 연산

public void delete( int x ) {

if (isEmpty( ))

System.out.println("List Empty");

else{

int loc = -1;

for ( int i = 0; i <= no; i++)        // 삭제 위치 결정

if ( x == itemList[i] )

loc = i;

if ( loc == -1 )

System.out.println("삭제할 원소 " + x + "없습니다. \n");

else{

for ( int i = loc; i < no; i++ )

itemList[i] = itemList[i+1];        // 원소 삭제

no--;

}

}

}


- 예제 코드

class ArrayLinearList{

private int no; // 배열의 실제 원소 나타내는 변수

private int size;         // 배열의 크기

private int increment; // 배열의 확장 단위

private int[] itemList; // 원소 저장 배열

public ArrayLinearList() {     // 리스트 변수들 초기화

no = -1;

size = 50;

increment=10;

itemList = new int[size];

}

public boolean isEmpty() {

return no == -1;     // 공백 리스트 표현

}

public void insert(int x) { // 리스트에 원소 삽입

int pos=0;

if(no==size-1) {

size += increment; // 배열 크기 확장

int[] tempArray=new int[size];

for(int i=0; i<=no; i++)     // 새로운 배열로 원소 이동

tempArray[i]=itemList[i];

itemList=tempArray; // 참조 변수를 조정

}

if(no==-1) {

no++;

itemList[no]=x;

}

else {

for(int i=0; i<=no; i++)     // 삽입 위치 결정

if(x>itemList[i])

pos++;

for(int i=no+1;i>pos;i--)     // 기존 자료 이동

itemList[i]=itemList[i-1];

itemList[pos]=x; // 원소 삽입

no++;

}

}

public void delete(int x) {

if(isEmpty())

System.out.println("List Empty");

else {

int loc=-1;

for(int i=0; i<=no; i++) // 삭제 위치 결정

if(x==itemList[i])

loc=i;

if(loc==-1)

System.out.println("삭제할 원소 " + x + " 없습니다.\n");

else {

for(int i=loc; i<no; i++)

itemList[i]=itemList[i+1]; // 원소 삭제

no--;

}

}

}

public void print() {

for(int i=0; i<no; i++) // 원소 출력

System.out.print(itemList[i]+", ");

System.out.println(itemList[no]+"\n");

}

}

public class UseLinearList {

public static void main(String args[]) {

ArrayLinearList list1=new ArrayLinearList();

list1.insert(12);

list1.insert(24);

list1.insert(36);

list1.insert(58);

list1.insert(79);

System.out.println("*** 삽입 후 선형 리스트 ***");

list1.print();

list1.delete(24);

System.out.println("*** 삭제 후 선형 리스트 ***");

list1.print();

list1.delete(58);

System.out.println("*** 삭제 후 선형 리스트 ***");

list1.print();

list1.delete(12);

System.out.println("*** 삭제 후 선형 리스트 ***");

list1.print();

list1.delete(10);

System.out.println("*** 삭제 후 선형 리스트 ***");

list1.print();

}

}



- 실행 결과


'CS > 자료구조' 카테고리의 다른 글

힙(Heap)  (0) 2019.08.14
트리(Tree)  (0) 2019.08.05
큐(queue)  (0) 2019.04.03
스택(stack)  (0) 2019.03.24
성능 분석과 측정  (0) 2019.03.21