C 언어 데이터 구조 -- 창고
35470 단어 데이터 구조
창고 가 무엇 입 니까?
스 택 은 표 의 한 끝 에서 만 조작 하 는 선형 표 이다.그 삽입 과 삭 제 는 표 의 한 끝 에서 만 진행 할 수 있다.열 린 병 처럼 적재 와 꺼 내 는 것 은 병 입구 에서 만 작 동 할 수 있다.고정 적 으로 변 하지 않 는 한 끝 을 스 택 바닥 이 라 고 부 르 고 삽입, 삭제 하 는 그 끝 을 스 택 지붕 이 라 고 부 릅 니 다. 스 택 은 한 입 으로 조작 하기 때문에 새로 삽 입 된 요 소 는 스 택 꼭대기 에 만 놓 을 수 있 습 니 다. 삭제 할 요 소 는 반드시 스 택 꼭대기 의 요소 입 니 다. 즉, 마지막 으로 스 택 에 들 어간 요 소 는 반드시 스 택 에서 나 와 야 합 니 다.
스 택 순서 저장 소
#include
#include
#define MAXSIZE 10
typedef struct
{
int data[MAXSIZE];
int top;
}SeqStack;
//
void Init_SeqStack(SeqStack **s)
{
// , s
*s=(SeqStack*)malloc(sizeof(SeqStack));
(*s)->top=-1;
}
//
int Empty_SeqStack(SeqStack *s)
{
if(s->top==-1)
return 1;
else
return 0;
}
//
void Push_Stack(SeqStack *s,int x)
{
if(s->top==MAXSIZE-1)
printf("Stack is full!
");
else
{
s->top++;
s->data[s->top]=x;
}
}
//
void Pop_SeqStack(SeqStack *s,int *x)
{
if(s->top==-1)
printf(" !
");
else
{
*x=s->data[s->top];
s->top--;
}
}
//
void Top_SeqStack(SeqStack *s,int *x)
{
if(s->top==-1)
printf(" !
");
else
{
*x=s->data[s->top];
printf(" !
");
}
}
//
void Output_SeqStack(SeqStack *s)
{
SeqStack *w;
int i;
printf(" :");
for(i=s->top;i>=0;i--)
printf("%d ",s->data[i]);
printf("
");
}
void Menu()
{
puts("****************");
puts("1. ");
puts("2. ");
puts("3. ");
puts("4. ");
puts("5. ");
puts("6. ");
puts("****************
");
printf("Your choice is:");
}
//
int main()
{
SeqStack *s;
int x,e=-1,i;
while(e==-1)
{
Menu();
scanf("%d",&i);
puts("");
switch(i)
{
case 1:
Init_SeqStack(&s);
printf(" !
");
break;
case 2:
printf("%d
",Empty_SeqStack(s));
break;
case 3:
printf(" :");
scanf("%d",&x);
Push_Stack(s,x);
break;
case 4:
Output_SeqStack(s);
break;
case 5:
Pop_SeqStack(s,&x);
break;
case 6:
Top_SeqStack(s,&x);
printf(" :%d
",x);
break;
case 0:
e=0;
break;
default:printf(" ,
");
}
}
return 0;
}
스 택 체인 저장 소
#include
#include
/* , */
typedef struct node
{
int data;
struct node *next;
}StackNode;
//
void Init_LinkStack(StackNode **s)
{
*s=NULL; // ,
}
//
int Empty_LinkStack(StackNode *s)
{
if(s==NULL)
return 1;
else
return 0;
}
//
void Push_LinkStack(StackNode **top,int x)
{
StackNode *p;
// , p
p=(StackNode*)malloc(sizeof(StackNode));
//
p->data=x;
// p top, p ,p->next NULL;
// p ,p->next , p ,p
p->next=*top;
// top, top
*top=p;
printf(" !
");
}
//
void Pop_LinkStack(StackNode **top,int *x)
{
StackNode *p;
if(*top==NULL)
printf(" !
");
else
{
*x=(*top)->data;
p=*top; //
printf(" :%d
",p->data);
*top=(*top)->next;
free(p);
}
}
//
void Output_LineStack(StackNode *s)
{
StackNode *w;
w=s;
printf(" :");
while((w->next)!=NULL)
{
printf("%d ",w->data);
w=w->next;
}
/*
, w
, , , w,
,w->next=NULL, ,
,
*/
printf("%d",w->data);
puts("");
}
void Menu()
{
puts("****************");
puts("1. ");
puts("2. ");
puts("3. ");
puts("4. ");
puts("5. ");
puts("****************
");
printf("Your choice is:");
}
int main()
{
StackNode *s;
int i,e=-1,x;
while(e==-1)
{
Menu();
scanf("%d",&i);
puts("");
switch(i)
{
case 1:
Init_LinkStack(&s);
printf(" !
");
break;
case 2:
printf("%d
",Empty_LinkStack(s));
break;
case 3:
printf(" :");
scanf("%d",&x);
Push_LinkStack(&s,x);
break;
case 4:
Output_LineStack(s);
break;
case 5:
Pop_LinkStack(&s,&x);
break;
case 0:
e=0;
break;
default:printf(" ,
");
}
}
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에 따라 라이센스가 부여됩니다.