데이터 구조 (1) - 선형 구조
18194 단어 데이터 구조
//List.h
#ifndef LIST_H_
#define LIST_H_
#define MAXSIZE 100
typedef struct _Poly
{
int a;
int n;
bool operator == (_Poly e)
{
if (a == e.a && n == e.n)
return true;
else
return false;
}
}Poly;
#define ElemType Poly
typedef struct _Node
{
ElemType data[MAXSIZE];
int last;
}Node;
class List
{
private:
Node *data;
public:
List();
~List();
void Insert(ElemType e, int index);
void Remove(int index);
int Find(ElemType e);
ElemType FindKth(int k);
int Length();
};
#endif
//List.cpp
#include "List.h"
#include <iostream>
List::List()
{
data = new Node();
data->last = -1;
}
List::~List()
{
delete data;
}
void List::Insert(ElemType e, int index)
{
if (data->last == MAXSIZE - 1)
{
std::cout << " " << std::endl;
return;
}
if (index < 0 || index >(data->last + 1))
{
std::cout << " " << std::endl;
return;
}
for (int i = data->last; i >= index; i--)
{
data->data[i + 1] = data->data[i];
}
data->data[index] = e;
data->last++;
}
void List::Remove(int index)
{
if (index < 0 || index > data->last)
{
std::cout << " " << std::endl;
return;
}
for (int i = index; i < data->last; i++)
{
data->data[i] = data->data[i + 1];
}
data->last--;
}
int List::Find(ElemType e)
{
for (int i = 0; i < data->last; i++)
{
if (data->data[i] == e)
return i;
}
return -1;
}
ElemType List::FindKth(int k)
{
if (k < 0 || k > data->last)
{
std::cout << " " << std::endl;
}
return data->data[k];
}
int List::Length()
{
return (data->last + 1);
}
2. 체인 메모리
//PList.h
#ifndef PLIST_H_
#define PLIST_H_
#define MAXSIZE 100
typedef struct _Poly
{
int a;
int n;
bool operator == (_Poly e)
{
if (a == e.a && n == e.n)
return true;
else
return false;
}
}Poly;
#define ElemType Poly
typedef struct _PNode
{
ElemType data;
_PNode* next;
}PNode;
class PList
{
private:
PNode *head;
public:
PList();
~PList();
void Insert(ElemType e, int index);
void Remove(int index);
int Find(ElemType e);
ElemType FindKth(int k);
int Length();
};
#endif
//PList.cpp
#include "PList.h"
#include <iostream>
PList::PList()
{
head = new PNode();
head->next = NULL;
}
PList::~PList()
{
delete head;
}
void PList::Insert(ElemType e, int index)
{
PNode *p = head;
PNode *s = new PNode();
s->data = e;
s->next = NULL;
if (index > Length())
std::cout << " " << std::endl;
int i = 0;
while (p && i < index)
{
p = p->next;
i++;
}
s->next = p->next;
p->next = s;
}
void PList::Remove(int index)
{
PNode *p = head;
PNode *s = new PNode();
if (index > Length())
std::cout << " " << std::endl;
int i = 0;
while (p && i < index)
{
p = p->next;
i++;
}
s = p->next;
p->next = s->next;
delete s;
}
int PList::Find(ElemType e)
{
PNode *p = head;
int i = 0;
while (p)
{
if (p->data == e)
return i;
i++;
p = p->next;
}
return -1;
}
ElemType PList::FindKth(int k)
{
PNode *p = head;
if (k < 0 || k > Length())
{
std::cout << " " << std::endl;
}
int i = 0;
while (p && i < k)
{
p = p->next;
i++;
}
return p->next->data;
}
int PList::Length()
{
PNode *p = head;
int i = 0;
while (p)
{
i++;
p = p->next;
}
return i;
}
3. 테스트 사례
//main.cpp
#include <iostream>
#include <stdlib.h>
#include "PList.h"
using namespace std;
int main()
{
PList L;
for (int i = 0; i < 5; i++)
{
Poly t = { i, i };
L.Insert(t, i);
};
cout << "last:" << L.Length() << endl;
Poly e = { 2, 2 };
cout << "Find return:" << L.Find(e) << endl;
for (int i = 0; i < 4; i++)
{
cout << L.FindKth(i).a << "X" << L.FindKth(i).n << " + ";
}
cout << L.FindKth(4).a << "X" << L.FindKth(4).n << endl;
system("pause");
return 0;
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
정수 반전Udemy 에서 공부 한 것을 중얼거린다 Chapter3【Integer Reversal】 (예) 문자열로 숫자를 반전 (toString, split, reverse, join) 인수의 수치 (n)가 0보다 위 또는 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.