[데이터 구조] 순서 구조 구현 스 택
9687 단어 데이터 구조
스 택: 특수 한 선형 표 로 고정된 한 끝 에 만 요 소 를 삽입 하고 삭제 할 수 있 습 니 다.
데 이 터 를 삽입 하고 삭제 하 는 작업 의 한 끝 을 스 택 지붕 이 라 고 하고 다른 한 끝 은 스 택 바닥 이 라 고 합 니 다.어떠한 요소 도 포함 하지 않 은 스 택 을 빈 스 택 이 라 고 부 르 고 스 택 은 후진 선 출 의 선형 표 라 고도 부른다.
창고 의 특징: 후진 선 출 (LIFO)
2. 순서 구조 구현 스 택
코드 는 다음 과 같 습 니 다:
//
#ifndef __STACK_H__
#define __STACK_H__
#include
#include
#include
using namespace std;
#define STACK_DEFAULT_SIZE 10 //
typedef int ElemType;
typedef struct Stack
{
ElemType* base;
int top;
int capacity;
}Stack;
void menu(); //
void InitStack(Stack* s); //
bool IsFull(Stack* s); //
bool IsEmpty(Stack* s); //
bool Push(Stack* s, ElemType x); //
bool Pop(Stack* s, ElemType* x); //
int Lenth(Stack* s); //
bool GetTop(Stack* s, ElemType *x); //
void ShowStack(Stack* s); //
void Clear(Stack* s); //
void Destroy(Stack* s); //
#endif //__STACK_H__
//
#include "stack.h"
void menu() //
{
cout << "*******************************************" << endl;
cout << "************* 【SeqStack】 **************" << endl;
cout << "*** [1]Push [2]Pop [3]lenth ***" << endl;
cout << "*** [4]GetTop [5]ShowStack [6]Clear ***" << endl;
cout << "************* 【HaHaHa】 **************" << endl;
cout << "*******************************************" << endl;
}
void InitStack(Stack* s) //
{
ElemType* p = (ElemType*)malloc(sizeof(ElemType)* STACK_DEFAULT_SIZE);
assert(p != NULL);
s->base = p;
s->capacity = STACK_DEFAULT_SIZE;
s->top = 0;
}
bool IsFull(Stack* s) //
{
return s->top == s->capacity;
}
bool IsEmpty(Stack* s) //
{
return s->top == 0;
}
bool Push(Stack* s, ElemType x) //
{
if (IsFull(s))
{
cout << " !" << endl;
return false;
}
s->base[s->top++] = x;
return true;
}
bool Pop(Stack* s, ElemType* x) //
{
if (IsEmpty(s))
{
cout << " !" << endl;
return false;
}
*x = s->base[--s->top];
return true;
}
int Lenth(Stack* s) //
{
return s->top;
}
bool GetTop(Stack* s, ElemType *x) //
{
if (IsEmpty(s))
{
cout << " !" << endl;
return false;
}
*x = s->base[--s->top];
return true;
}
void ShowStack(Stack* s) //
{
int i = 0;
for (i = s->top - 1; i >= 0; --i)
{
cout << s->base[i] << "—>";
}
cout << "NULL" << endl;
}
void Clear(Stack* s) //
{
s->top = 0;
s->capacity = 0;
}
void Destroy(Stack* s) //
{
Clear(s);
free(s->base);
s->base = NULL;
}
//
#include "stack.h"
int main()
{
Stack s;
ElemType item;
int select = 1;
InitStack(&s);
while (select)
{
menu();
cout << " : " << endl;
cin >> select;
switch (select)
{
case 1:
cout << " : ";
while (cin >> item, item != -1)
{
Push(&s, item);
}
break;
case 2:
Pop(&s, &item);
cout << item << endl;
break;
case 3:
cout << " : " << Lenth(&s) << endl;
break;
case 4:
GetTop(&s, &item);
cout << " : " << item << endl;
break;
case 5:
ShowStack(&s);
break;
case 6:
Clear(&s);
break;
default:
break;
}
}
Destroy(&s);
return 0;
}
이렇게 해서 순서 구조 가 스 택 을 실현 하면 ok 입 니 다.
얘 들 아, 참고 할 수 있 으 니까 지적 도 해 줘.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 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에 따라 라이센스가 부여됩니다.