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();
}
}
- 실행 결과