창고의 실현 코드
한 쪽에서만 요소를 읽거나 삭제할 수 있습니다.고급 후진 기능(FILO)
창고도 순서 창고와 체인 창고로 나뉜다
순서 창고는 다음 노드의 위치를 가리키는 추가 공간을 필요로 하지 않으며 공간 이용률이 높다
그러나 동적 확장이 불가능하고 체인 창고는 그와 마주친다.다음은 두 개의 창고 코드입니다.
순서 창고
#include
#include
#include
#define OK 1
#define ERROR 0
#define MAX 100
#define DELAY 1
typedef int ElemType;
typedef int Status;
typedef struct{
ElemType * base;
ElemType * top;
} Sqstack;
Status initStack(Sqstack * stack){
stack->base = (ElemType *)malloc(MAX * sizeof(ElemType));
stack->top = stack->base;
return OK;
}
Status stackEmpty(Sqstack stack){
if(stack.top == stack.base)return OK;
else return ERROR;
}
int stackLength(Sqstack stack){
int count = stack.top - stack.base;
return count;
}
Status getTopValue(Sqstack stack,ElemType * e){
*e = *(stack.top-1);
return OK;
}
Status Push(Sqstack *stack,ElemType e){
if((stack->top - stack->base) >= MAX)return ERROR;
*(stack->top) = e;
stack->top++;
return OK;
}
Status Pop(Sqstack *stack,ElemType * e){
if(stack->top == stack->base)return ERROR;
*e = *(stack->top-1);
stack->top--;
return OK;
}
Status printStack(Sqstack stack){
if( stackEmpty(stack) ){
printf("empty
");
return OK;
}
printf("stack len is %d
",stackLength(stack));
while(stack.base < stack.top){
printf("[%d] ",*(stack.base));
stack.base++;
}
printf("
");
return OK;
}
int main(){
Sqstack stack;
ElemType value;
initStack(&stack);
while(1){
system("clear");
printf("p = push
P = pop
");
printf("g = get
Value e = exit
");
printStack(stack);
printf("enter a your choose:");
char sel = getchar();
if( sel == 'p'){
printf("enter push value:");
scanf("%d",&value);
Push(&stack,value);
sleep(DELAY);
}
else if(sel == 'P'){
Pop(&stack,&value);
printf("value:%d is poped
",value);
sleep(DELAY);
}
else if(sel == 'g'){
getTopValue(stack,&value);
printf("value is %d
",value);
sleep(DELAY);
}
else if(sel == 'e'){
exit(0);
}
}
}
체인 스택
#include
#include
#include
#define OK 1
#define ERROR 0
typedef int ElemType;
typedef int Status;
typedef struct Node{
ElemType data;
struct Node * next;
} Node;
Node * initStack(){
Node * s = (Node*)malloc(sizeof(Node));
s->next = NULL;
return s;
}
Status Push(Node *s,ElemType e){
Node *new = (Node*)malloc(sizeof(Node));
new->data = e;
new->next = s->next;
s->next = new;
return OK;
}
Status Pop(Node *s,ElemType *e){
Node *top = s->next;
*e = top->data;
s->next = top->next;
free(top);
return OK;
}
ElemType getTopvalue(Node *s){
Node *top = s->next;
return top->data;
}
int getLength(Node *s){
int len=0;
while(s->next){
s=s->next;
len++;
}
return len;
}
Status stackEmpty(Node *s){
if(s->next)return ERROR;
else return OK;
}
Status printStack(Node *s){
if(stackEmpty(s)){printf("stack is empty
");return ERROR;}
else printf("stack len is %d
",getLength(s));
while(s=s->next)printf("[%d]",s->data);
printf("
");
return OK;
}
int main(){
char sel;
ElemType val;
Node * s = initStack();
while(1){
system("clear");
printStack(s);
printf("enter code:");
sel = getchar();
if(sel == 'p'){
printf("enter value:");
scanf("%d",&val);
Push(s,val);
}
if(sel == 'P'){
Pop(s,&val);
printf("%d is poped
",val);
sleep(1);
}
if(sel == 'g'){
printf("top value is %d
",getTopvalue(s));
sleep(1);
}
if(sel == 'e')exit(0);
}
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.