본문 바로가기
etc

자료구조 소스코딩

by haheehee 2022. 12. 22.

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

댓글