데이터 구조 | C 언어 는 스 택 의 순서 와 체인 구 조 를 실현 합 니 다.
23559 단어 DataStructure
순서대로 저 장 된 스 택 을 순서 스 택 이 라 고 합 니 다. 주소 의 연속 적 인 저장 부 를 이용 하여 스 택 밑 에서 스 택 꼭대기 까지 저장 하 는 데이터 요 소 를 사용 하 는 동시에 표지 top 이 스 택 꼭대기 의 위 치 를 표시 합 니 다.
이곳 은 구조 체 를 사용 하여 창 고 를 표시 한다.
#define maxsize 100
typedef struct stack{
int data[maxsize];
int top;
}stack
인 코딩 하기 전에 우 리 는 몇 가지 조작 상 태 를 알 아야 한다.
실 현 된 코드 는 다음 과 같다.
#include
#include
#include
#define MAXSIZE 200
typedef struct SNode* Stack;
typedef struct SNode SNode;
struct SNode{
int data[MAXSIZE];
int top;
};
Stack initial_stack(){
Stack s = (Stack)malloc(sizeof(SNode));
s->top = -1;
}
bool push(Stack S, int item){
if(S->top == MAXSIZE - 1){
printf("ERROR: The stack is full!
");
return false;
}
else{
S->top++;
S->data[S->top] = item;
return true;
}
}
bool isEmpty(Stack s){
return s == NULL || s->top == -1;
}
bool isFull(Stack s){
return s->top == MAXSIZE - 1;
}
int getElement(Stack s, int index){
if(s->top == -1){
printf("The stack is empty!");
return -1;
}
if(index > s->top || index < 0){
printf("The index is out of bound!");
return -1;
}
return s->data[index];
}
int pop(Stack S){
if(isEmpty(S))
return -1;
return S->data[(S->top)--];
}
int top(Stack S){
if(isEmpty(S))
return -1;
return S->data[S->top];
}
void printStack(Stack S){
if(isEmpty(S))
return;
for(int i = 0; i <= S->top; i++){
printf("%d \t", S->data[i]);
}
printf("
");
}
int main()
{
Stack s = initial_stack();
push(s, 3);
push(s, 5);
pop(s);
printStack(s);
}
스 택 의 체인 구조
스 택 의 체인 구 조 는 보통 단일 체인 표를 통 해 이 루어 지 며 스 택 이 넘 치 는 상황 이 존재 하지 않 습 니 다.여기 서 실 현 된 체인 구조 규정 스 택 에 하나의 머리 결산 점 이 존재 하 는데 이 결산 점 은 스 택 요소 와 무관 하지만 프로 그래 밍 의 실현 을 편리 하 게 할 수 있다.두 결점 의 다음 결점 에 저 장 된 값 이 야 말로 창고 밑 원소 다.
구현 코드 는 다음 과 같 습 니 다:
#include
#include
#include
typedef struct SNode* Stack;
typedef struct SNode SNode;
struct SNode{
int data;
SNode* next;
};
Stack initial_stack(){
Stack s = (Stack)malloc(sizeof(SNode));
s->next=NULL;
s->data=-1; //
return s;
}
bool isEmpty(Stack s){
return s->next == NULL;
}
bool push(Stack s, int item){
if(s == NULL)
return false;
Stack tmpNode = (Stack)malloc(sizeof(SNode));
tmpNode->data=item;
tmpNode->next=s->next;
s->next = tmpNode;
return true;
}
int top(Stack s){
if(isEmpty(s))
return -1;
return s->next->data;
}
int pop(Stack S){
if(isEmpty(S))
return -1;
int topVal = top(S);
Stack oldTopNode = S->next;
Stack newTopNode = oldTopNode->next;
S->next= newTopNode;
free(oldTopNode);
return topVal;
}
void printStack(Stack s){
if(isEmpty(s))
return;
Stack node = s->next;
while(s){
printf("%d -> ", s->data);
s = s->next;
}
printf("
");
}
int main()
{
Stack s = initial_stack();
push(s, 1);
push(s, 2);
push(s, 3);
printStack(s);
pop(s);
printStack(s);
return 0;
}
상기 코드 는 엄격 하지 않 은 테스트 만 거 쳤 습 니 다. 만약 에 무슨 문제 가 발견 되면 댓 글 의 수정 을 환영 합 니 다!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
알고리즘 체조 17단일 링크 리스트의 헤드 노드와 정수 n 를 지정하면(자), 링크 리스트를 n 회전시키는 알고리즘 체조. 다음 두 가지 예가 있습니다. 인수로서 건네받은 링크 리스트와 정수 n = 2 회전 후의 출력입니다. n 의 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.