창고 - 순서 창고 (순서 표시 와 실현)
추상 데이터 형식 스 택 의 정의:
스 택 (stack) 은 표 끝 에 삽입 하거나 삭제 작업 을 하 는 선형 표 로 한정 되 어 있 기 때문에 스 택 에 있어 표 끝 은 특별한 의 미 를 가지 고 스 택 지붕 이 라 고 부 르 고 해당 되 며 표 끝 은 스 택 바닥 이 라 고 부른다.원소 가 없 는 빈 시 계 를 빈 창고 라 고 합 니 다.
창고 -- 후진 선 출 (last in first out)
스 택 - 순서 스 택 - 스 택 의 순서 저장 구 조 는 주소 연속 저장 부 를 이용 하여 스 택 밑 에서 스 택 꼭대기 까지 차례대로 저장 하 는 데이터 요소 입 니 다.
얼마나
typedef struct {
SElemType *base; // ,base NULL,
SElemType *top; //
int stacksize; //
}SqStack,*Stack;
창고 의 순서 표시 와 실현 1:
//
#include <stdlib.h>
#include <stdio.h>
#define STACK_INIT_SIZE 20
#define STACKINCREMENT 10
#define OK 1
#define ERROR 0
#define INFEASIBLE -1
#define OVERFLOW -2
typedef int Status;
typedef int SElemType;
//top , ,
//base , base=NULL,
//top=base
typedef struct {
SElemType *base; // ,base NULL
SElemType *top; //
int stacksize; //
}SqStack,*Stack;
Status init_stack(Stack s);//
Status get_top(SqStack *s,SElemType *e); // , e , ok, ERROR
Status push(Stack s,SElemType e); //
Status pop(SqStack *s,SElemType *e); // , s , e , ok, ERROR
int main()
{
//
SqStack s;
//
init_stack(&s);
//
int i;
for(i=0;i<10;i++){
push(&s,i);
}
int top_e ;
get_top(&s,&top_e);
printf(" :%d
",top_e);
int pop_e;
pop(&s,&pop_e);
printf(" :%d
",pop_e);
int n;
get_top(&s,&n);
printf(" :%d
",n);
return 0;
}
Status init_stack(SqStack *s){
printf("aaaaaaaa");
// s
//malloc ,
s->base = (SElemType*)malloc(STACK_INIT_SIZE * sizeof(SElemType));
printf("
______");
if(!s->base){
exit(OVERFLOW);
}
s->top=s->base;
s->stacksize = STACK_INIT_SIZE;
return OK;
}//
// , e , ok, ERROR
Status get_top(SqStack *s,SElemType *e){
if(s->base==s->top){
return ERROR;
}
*e = *(s->top-1);
return OK;
}
Status push(Stack s,SElemType e){
if(s->top - s->base >= s->stacksize){// ,
s->base = (SElemType*)realloc(s->base,(s->stacksize+STACKINCREMENT)*sizeof(SElemType));
if(!s->base){
exit(OVERFLOW);
}
s->top = s->base+s->stacksize;
s->stacksize+=STACKINCREMENT;
}
// , ,
*(s->top)= e;
++s->top;
return OK;
}
Status pop(SqStack *s,SElemType *e){
// , s , e ,
if(s->top==s->base){
return ERROR;
}
--s->top;
*e = *(s->top);
return OK;
}
창고 의 순서 표시 와 실현 2:
#include <stdio.h>
#include <stdlib.h>
//================ ================
#define STACK_INIT_SIZE 10 //
#define STACKINCREMENT 5 //
typedef int SElemType; // SElemType int
typedef struct{
SElemType *base;//
SElemType *top; //
int stacksize; //
}SqStack;
//===============
void InitStack(SqStack *S)
{
S->base=(SElemType*)malloc(STACK_INIT_SIZE*sizeof(SElemType));
if(!S->base){
printf("malloc error
");
exit(1);
}else{
printf("malloc success
");
}
S->top=S->base;
S->stacksize = STACK_INIT_SIZE;
}
//=================Push : S ,e
void Push(SqStack *S,SElemType e)
{
if(S->top>=S->base+S->stacksize){
//
S->base=(SElemType *)realloc(S->base,(S->stacksize+STACKINCREMENT)*sizeof(SElemType));
if(!S->base){
printf("realloc error
");
exit(1);
}else {
printf("realloc success
");
}
S->top = S->base + S->stacksize;
S->stacksize=+STACKINCREMENT;
}
*S->top++ = e;
}
//===============Pop: ,s ,e
int Pop(SqStack *S,int *e)
{
if(S->base == S->top){
printf("empty
");
exit(1);
}
S->top--;
*e = *S->top;
return 0;
}
int main()
{
SqStack S;
int i,data,a,n;
InitStack(&S); //
printf("input data
");
scanf("%d",&data);
while(data!=0)
{
Push(&S,data);
scanf("%d",&data);
}
printf("output n
"); //
scanf("%d",&n);
for(i=0;i<n;i++)
{
Pop(&S,&a);
printf("%d
",a);
}
return 0;
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.