[데이터 구조] c 언어 는 체인 스 택 의 입 스 택, 출 스 택, 비우 기, 소각 등 작업 을 실현 합 니 다.
6579 단어 데이터 구조
/*
ADT (stack)
Data
。 ,
Operation
InitStack(*S): , S
DestroyStack(*S): ,
ClearStack(S):
StackEmpty(S): , true, false
GetTop(S,*e): , e S
Push(S,e): , e S
Pop(S,*e): S , e
StackTraverse(S):
StackLength(S):
endADT
*/
#include
#include
#define OVERFLOW -1
#define STACK_INIT_SIZE 10
#define STACKINCREMENT 2
#define OK 1
#define ERROR 0
#define TRUE 1
#define FALSE 0
typedef int SElemType;
typedef int Status;
typedef struct StackNode
{
SElemType data;
struct StackNode *next;
}StackNode, *LinkStackPtr;
typedef struct LinkStack
{
LinkStackPtr top;
int count;
}*PLinkStack;
/* */
Status InitStack(PLinkStack *S)
{
*S = (PLinkStack)malloc(sizeof(struct LinkStack));
(*S)->top = NULL;
(*S)->count = 0;
return OK;
}
/* */
Status ClearStack(PLinkStack S)
{
LinkStackPtr p;
while(S->top){
p = S->top;
S->top = S->top->next;
S->count--;
free(p);
}
return OK;
}
/* */
Status DestroyStack(PLinkStack *S)
{
ClearStack(*S);
free(*S);
return OK;
}
/* */
Status StackEmpty(PLinkStack S)
{
if(S->top)/* */
return FALSE;
else
return TRUE;
}
/* , e S */
Status GetTop(PLinkStack S,SElemType *e)
{
if(!S->top)return ERROR;
*e = S->top->data;
return OK;
}
/* */
Status Push(PLinkStack S,SElemType *e)
{
LinkStackPtr p = (LinkStackPtr)malloc(sizeof(struct StackNode));
p->data = *e;
p->next = S->top;
S->top = p;
S->count++;
return OK;
}
/* */
Status Pop(PLinkStack S,SElemType *e)
{
LinkStackPtr p;
if(!GetTop(S,e))return ERROR;
p = S->top;
S->top = S->top->next;
S->count--;
free(p);
return OK;
}
/* */
int StackLength(PLinkStack S)
{
return S->count;
}
/* */
Status StackTraverse(PLinkStack S,Status (* visit)(SElemType))
{
LinkStackPtr p;
p = S->top;
while(p){
visit(p->data);
p = p->next;
}
printf("
");
return OK;
}
/* */
Status visit(SElemType e)
{
printf("%d ",e);
return OK;
}
int main()
{
SElemType e,i;
PLinkStack s;
printf("InitStack 1--12
");
if(InitStack(&s))
for(e = 1; e <= 12; e++)
{
Push(s,&e);
}
printf("StackTraverse :
");
StackTraverse(s,visit);
Pop(s,&e);
printf("Pop :%d
",e);
Pop(s,&e);
printf("Pop :%d
",e);
printf("Push %d
",e);
Push(s,&e);
printf("StackEmpty :%d(1: 0: )
",StackEmpty(s));
GetTop(s,&e);
printf("GetTop :%d
",e);
printf("StackLength: %d
",StackLength(s));
ClearStack(s);
printf("ClearStack ,StackEmpty %d(1: 0: )
",StackEmpty(s));
DestroyStack(&s);
printf("DestroyStack ");
return 0;
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 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에 따라 라이센스가 부여됩니다.