데이터 구조: 순서 표 ADT 의 실현
5087 단어 학습 노트
일반적인 상황 에서 프로그램 에 데 이 터 를 저장 해 야 한다 면 가장 간단 하고 효과 적 인 방법 은 선형 표 에 저장 하 는 것 이다.대량의 데 이 터 를 조직 하고 검색 해 야 더 복잡 한 데이터 구 조 를 사용 하 는 것 을 고려 할 수 있다.
모든 데이터 구조 에서 가장 간단 한 것 은 선형 표 이다.일반적으로 선형 표 는 n (n > = 0) 개 데이터 요소 의 유한 한 서열 로 정의 된다.기록:
L = (a(1),···,a(i),a(i+1),···,a(n))
그 중에서 L 은 표 명 이 고 a (i) 는 데이터 요소 이 며 더 이상 분할 할 수 없 는 원자 데이터 이 며 결점 이나 표 항 이 된다.
선형 표 는 유한 한 서열 로 표 중의 각 결점 이 연이어 배열 되 고 두 개의 인접 한 결점 사이 에 직접적인 전구 와 직접적인 후계 의 관계 가 있다 는 것 을 의미한다.선형 표 에는 유일한 첫 번 째 결점 과 마지막 결점 이 존재 한다. 첫 번 째 결점 은 전구 가 없고 마지막 결점 은 후계 가 없다. 모든 결점 은 기껏해야 하나의 직접 전구 만 있 고 기껏해야 하나의 직접 후계 만 있다.
선형 표 의 저장 은 두 가지 가 있 는데 그것 이 바로 순서 저장 방식 과 체인 표 저장 방식 이다.순서 저장 방식 으로 이 루어 진 선형 표를 순서 표 라 고 하 는데 배열 을 표 로 하 는 저장 구조 이다.여기 순서 표를 말씀 드 리 겠 습 니 다.
순서 표 의 정의: 선형 표 의 모든 노드 를 논리 적 인 순서에 따라 컴퓨터 저장 소 에서 지정 한 저장 위치 에서 시작 하 는 연속 저장 공간 에 순서대로 저장 합 니 다.
특징 순서 표 에서 각 결점 의 논리 적 순 서 는 저 장 된 물리 적 순서 와 일치 합 니 다. 즉, i 번 째 결점 은 i 번 째 물리 적 위치 (1 < = i < = n) 에 저 장 됩 니 다.
(2) 순서 표 의 모든 결점 에 대해 순서 방문 도 할 수 있 고 무 작위 방문 도 할 수 있다.시계의 첫 번 째 결점 부터 시작 할 수 있 는 때 다. 하나하나 방문 해도 결점 번호 에 따라 직접 방문 할 수 있다.
다음은 ADT 의 C++ 구현 순서 표를 보 여 줍 니 다.
1. 순서 표 의 기본 조작
1. 구조 함수
sz 를 지정 하여 배열 의 길 이 를 정의 합 니 다.
LinearList::LinearList(int sz){
// , size,
if(sz>0){
data = new T[sz];//
if(data!=NULL){//
MaxSize = sz;
last = -1;
}
else{
cerr<
2. 지정 한 요소 찾기
여 기 는 표 에서 앞 뒤로 순서대로 찾 습 니 다.
int LinearList::Search(T &x) const{
// : x
int i = 0;//
while(i<=last&&data[i]!=x){
i++;
}
if(i>last){
return -1;//
}
else{
return i+1;//
}
}
3. 삽입 동작
순서 표 의 삽입 작업 은 비교적 간단 합 니 다. 순서 표 의 마지막 요소 의 아래 표 시 는 last 라 고 가정 합 니 다. 삽 입 된 요 소 는 x 입 니 다. 아래 표 시 된 i 의 위치 에 삽입 하려 면 원래 순서 표 에서 아래 표 시 된 i 를 last 의 결점 으로 한 단계 뒤로 이동 한 다음 에 x 를 아래 표 시 된 i 의 위치 에 삽입 하면 됩 니 다.
void LinearList::Insert(int i,T &x){
//i ,
if(last==MaxSize-1){
cerr<last+1){
cerr<i;j--){//
data[j] = data[j-1];
}
data[i] = x;// i x
cout<
4. 삭제 작업
작업 을 삭제 하 는 사상 은 삽입 작업 과 비슷 합 니 다. 선형 표 의 마지막 요소 의 아래 표 시 를 last 라 고 가정 하고 아래 표 시 된 요 소 를 삭제 하려 면 아래 표 시 를 i + 1 에서 last 의 결점 으로 한 자리 앞으로 이동 하면 됩 니 다.
// i
int LinearList::Delete(int i){
if(i<0||i>last){
cerr<=0){
last--;// -1
for(int j=i;j<=last;j++){//
data[j] = data[j+1];
}
cout<
5. 원소 x 이전의 원소 가 져 오기
// x
T LinearList::GetPrior(T &x){
if(Length()==0){
cout<
6. 원소 x 의 아래 표 시 를 획득
T LinearList::GetNext(T &x){
if(Length()==0){
cout<
7. 인쇄 순서 표
void LinearList::PrintList(){
for(int i=0;i<=last;i++){
cout<
8. 순서 표 비우 기 (석조 함수 이용)
~LinearList(){delete[] data;}
9. 순서 표 길이 조작
//
int Length() const {return last+1;}
2. 완전한 ADT 와 함수 조작
1. 데이터 구조의 정의 와 기본 조작 함수 에 대한 설명
/*
ADT
*/
#include
#include
using namespace std;
typedef double T;
class LinearList{
public:
int last;
int LinearListLength;//
int MaxSize;//
int LinearListLast;//
T *data;//
public:
LinearList(int sz);
~LinearList(){delete[] data;}
//
int Length() const {return last+1;}
// x
int Search(T &x) const;
// i x
void Insert(int i,T &x);
// x
int Delete(int i);
//
int IsEmpty(){return last==-1;}
//
int IsFull(){return last==MaxSize-1;}
// i
T GetData(int i){return data[i-1];};
// x
T GetPrior(T &x);
// x
T GetNext(T &x);
//
void PrintList();
};
2. 조작 함수 의 구체 적 인 실현
LinearList::LinearList(int sz){
// , size,
if(sz>0){
data = new T[sz];//
if(data!=NULL){//
MaxSize = sz;
last = -1;
}
else{
cerr<last){
return -1;//
}
else{
return i+1;//
}
}
void LinearList::Insert(int i,T &x){
//i ,
if(last==MaxSize-1){
cerr<last+1){
cerr<i;j--){//
data[j] = data[j-1];
}
data[i] = x;// i x
cout<last){
cerr<=0){
last--;// -1
for(int j=i;j<=last;j++){//
data[j] = data[j+1];
}
cout<
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
STL 학습노트(6) 함수 객체모방 함수는 모두pass-by-value이다 함수 대상은 값에 따라 전달되고 값에 따라 되돌아오기 때문에 함수 대상은 가능한 한 작아야 한다(대상 복사 비용이 크다) 함수 f와 대상 x, x 대상에서 f를 호출하면:...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.