개념/자료구조
배열 - 1차원 배열
웅드
2023. 11. 27. 18:39
- 동일한 데이터형 변수의 집합을 의미한다.
- 메모리상의 연속적인 공간에 할당된다.
- 배열 명은 그 배열의 시작 주소 상수이다.
- 배열 요소는 첨자로 구분하며 첨자는 0부터 시작된다.
1차원 배열
배열 전체의 초기화는 배열 선언문에서만 가능하다.
초기화 데이터는 중괄호로 묶어준다.
배열 요소의 개수보다 초기화 데이터가 많으면 error가 발생한다.
배열 선언 시 배열 크기는 생략할 수 없지만 초기화 데이터가 있는 경우에는 배열 크기를 생략할 수 있다.
문자열 char 배열에 저장할 때에는 배열 크기를 문자열의 길이 +1 (NULL 저장 공간)만큼 정해야 한다.
배열의 삽입 및 삭제
a배열의 n번 데이터를 삭제하면 (n+1)번 이후의 데이터들을 앞으로 당겨주는 작업을 해야한다.
void deleteData(int *ap, int *pcount, int index);
void insertData(int *ap, int *pcount, int index, int data);
void printArray(int *ap, int cnt);
int main(){
int num[10] = {1,2,3,4,5,6,7,8,9,10};
int count = 10;
printArray(num, count);
deleteData(num, &count, 4);
printArray(num, count);
getchar();
return0;
}
void deleteData(int *ap, int *pcount, int index){
int i;
if( intdex < *pcount ){
(*pcount)--;
for(i = index; i < *pcount; i++){
ap[i] = ap[i + 1];
}
}
else return;
}
// 1번째 printArray 출력 : 1 2 3 4 5 6 7 8 9 10
// 2번째 printArray 출력 : 1 2 3 4 6 7 8 9 10 -> 4번 째 index가 제거됨
a배열에 데이터를 추가하려면 데이터들을 뒤로 밀어준 후에 n번에 데이터를 저장해주어야 한다.
단, 추가 시에는 실제 배열 크기를 초과해서 저장하지 않도록 유의하야한다.
void deleteData(int *ap, int *pcount, int index);
void insertData(int *ap, int *pcount, int index, int data);
void printArray(int *ap, int cnt);
int main(){
int num[10] = {1,2,3,4,5,6,7};
int count = 7;
printArray(num, count);
insertData(num, &count, 4, 9);
printArray(num, count);
getchar();
return0;
}
void insertData(int *ap, int *pcount, int index, int data){
int i;
if( intdex <= *pcount ){
for(i = *pcount; i > index; i--){
ap[i] = ap[i - 1]; // 데이터들을 하나씩 뒤로 밀어서 저장한다.
}
ap[index] = data;
(*pcount)++;
}
else return;
}
// 1번째 printArray 출력 : 1 2 3 4 5 6 7
// 2번째 printArray 출력 : 1 2 3 4 9 5 6 7 -> 4번 째 index에 9가 추가됨
데이터 검색하기
int num[10] 배열을 1 ~ 20 사이의 난수로 초기화 한 후 배열 내의 데이터에서 사용자가 지정한 정수를 검색하여 배열 내의 저장된 위치를 출력한다.
-> 순차 검색 : 선형 자료구조에서 데이터를 처음부터 순차적으로 하나씩 비교하면서 찾는 방법
void printArray(int *ap, unsigned int cnt);
void initArray(int *ap, unsignde int size);
int searchArray(int *ap, unsigned int size, int sData);
int main(){
int num[10]; // 데이터 저장 배열
unsigned int size; // 배열의 크기 저장
int sData; // 검색할 데이터 저장
int res=0; // 검색 결과 저장
int i;
size = sizeof(num)/sizeof(num[0]); // 배열 크기 계산
initArray(num, size);
printArray(num, size);
for(i = 0; i < 5; i++){
cout << "검색할 정수를 입력하세요 " << endl;
cin >> &sData;
res = searchArray(num, size, sData);
if(res != -1) cout << sData << "는 " << res << " 번째에 있습니다. " << endl;
else cout << sData << "는 " << "존재하지 않습니다.";
}
return 0;
}
int searchArray(int *ap, unsigned int size, int sData){
int position = -1;
unsigned int i;
for(int i=0; i < size; i++){
if(ap[i] == sData){
position = i;
break;
}
}
return position;
}
회문 검사 프로그램
회문은 "level", 과 같이 앞으로 읽으나 뒤로 읽으나 똑 같은 단어이다.
입력된 영어 단어의 회문 여부를 검사하는 프로그램을 작성해라.
반복 수행하고 end를 입력하면 종료하자.
void inputString(char *cp);
int checkPalindrome(char *cp);
int main(){
char str[80];
int res;
inputString(str);
while(strcmp(str,"end")!=0){
res = checkPalindrome(str);
if(res==1) cout << str <<"은 회문입니다." << endl;
else cout << str <<"은 회문이 아닙니다." << endl;
inputString(str);
}
return 0;
}
void inputString(char *cp){
cout << "회문을 검사할 문자열을 입력하세요 : " << endl;
cin >> cp;
return;
}
int checkPalindrome(char *cp){
int length;
int check = 1;
length = strlen(cp);
for(int i = 0; i<length/2; i++){
if(cp[i] != cp[length-i-1]){
check = 0;
break;
}
}
return check;
}
반응형