2017.04.17 23:26 작성
//C++ 배열로 구현한 int 스택 클래스
void push(int e) {
if (isFull()) error("스택 포화 에러");
data[++top] = e;
}
int pop() {
if (isEmpty()) error("스택 공백 에러");
return data[top--];
}
int peek() {
if (isEmpty()) error("스택 공백 에러");
return data[top];
}
void display() {
printf("[스택 항목의 수 = %2d] ==> ", top + 1);
for (int i = 0; i <= top; i++)
printf("<%2d>", data[i]);
printf("\n");
}
// 원형 큐 프로그램
void enqueue(int val) {
if (isFull())
error(" error : 큐가 포화상태입니다.");
else {
rear = (rear + 1) % MAX_QUEUE_SIZE;
data[rear] = val;
}
}
int dequeue() {
if (isEmpty())
error(" error: 큐가 공백상태입니다/");
else {
front = (front + 1) % MAX_QUEUE_SIZE;
return data[front];
}
}
int peek() {
if (isEmpty())
error(" error:큐가 공백상태입니다.");
else
return data[(front + 1) % MAX_QUEUE_SIZE];
}
void display() {
printf("큐 내용: ");
int maxi = (front < rear) ? rear : rear + MAX_QUEUE_SIZE;
for (int i = front + 1; i <= maxi; i++)
printf("[%2d]", data[i%MAX_QUEUE_SIZE]);
printf("\n");
}
//연결 리스트로 구현된 스택 클래스
void push(Node *p) {
if (isEmpty()) top = p;
else {
p->setLink(top);
top = p;
}
}
Node* pop() {
if (isEmpty()) return NULL;
Node *p = top;
top = top->getLink();
return p;
}
Node* peek() { return top; }
void display() {
printf("[LinkedStack]\n");
for (Node *p = top; p != NULL; p = p->getLink())
p->display();
printf("\n");
}
// 연결된 큐 클래스
void enqueue(Node* p) {
if (isEmpty()) front = rear = p;
else {
rear->setLink(p);
rear = p;
}
}
Node* dequeue() {
if (isEmpty()) return NULL;
Node* p = front;
front = front->getLink();
if (front == NULL) rear = NULL;
return p;
}
Node* peek() { return front; }
void display() {
printf("[큐 내용] : ");
for (Node* p = front; p != NULL; p = p->getLink())
p->display();
printf("\n");
}
// 단순 연결 리스트를 위한 Node 클래스
#include <cstdio>
class Node {
Node* link;
int data;
public:
Node(int val = 0) : data(val), link(NULL) {}
Node* getLink() { return link; }
void setLink(Node* next) { link = next; }
void display() { printf("<%2d>", data); }
bool hasData(int val) { return data == val; }
void insertNext(Node *n) {
if (n != NULL) {
n->link = link;
link = n;
}
}
Node* removeNext() {
Node* removed = lik;
if (removed != NULL)
link = removed->link;
return removed;
}
};
// 단순 연결 리스트 클래스
Node* getEntry(int pos) {
Node* n = &org;
for (int i = -1; i < pos; i++, n = n->getLink())
if (n == NULL) break;
return n;
}
void insert(int pos, Node *n) {
Node* prev = getEntry(pos - 1);
if (prev != NULL)
prev->insertNext(n);
}
Node* remove(int pos) {
Node* prev = getEntry(pos - 1);
return prev->removeNext();
}
Node* find(int val) {
for (Node *p = getHead(); p != NULL; p = p->getLink())
if (p->hasData(val)) return p;
return NULL;
}
void replace(int pos, Node *n) {
Node* prev = getEntry(pos - 1);
if (prev != NULL) {
delete prev->removeNext();
prev->insertNext(n);
}
}
int size() {
int count = 0;
for (Node *p = getHead(); P != NULL; p = p->getLink())
count++;
return count;
}
void display() {
printf("[ 전체 항목 수 = %2d] : ", size());
for (Node *p = getHead(); p != NULL; p = p->getLink())
p->display();
printf("\n");
}
(자료구조 소스코딩 원본글 : https://blog.naver.com/hhahee )
'etc' 카테고리의 다른 글
[스크랩] REST API 관점에서 바라보는 HTTP 상태 코드(HTTP status code) (0) | 2023.08.31 |
---|---|
리눅스 명령어 (0) | 2023.08.30 |
sehcha CMD (0) | 2023.06.01 |
GET과 POST (0) | 2023.01.26 |
MVC 모델 (0) | 2022.12.19 |
댓글