어떻게 창고 로 대열 의 기능 을 실현 합 니까
2868 단어 데이터 구조
우선, 창고 의 정의 가 무엇 인지 먼저 들 어가 서 내 놓 으 세 요.대열 은 요? 먼저 나 가세 요.그럼 어떻게 창고 로 대열 을 이 룰 수 있 습 니까?
두 개의 스 택 을 신청 합 니 다. 하 나 는 s1 이 고 하 나 는 s2 입 니 다. s1 을 위주 로 스 택 에 데 이 터 를 저장 합 니 다. 스 택 에 들 어가 야 할 때마다 s1 에 직접 들 어가 고 스 택 에 나 갈 때마다 s1 의 모든 요 소 를 스 택 에 넣 고 순서대로 s2 에 누 른 다음 에 s2 스 택 을 한 번 더 가 져 옵 니 다. 나머지 는 s1 을 가 져 옵 니 다.이것 이 바로 창고 가 대열 을 실현 하 는 과정 이다.코드 를 살 펴 보 겠 습 니 다.
1#include
2
3 typedef struct stacknode
4 {
5 int data;
6 struct stacknode *next;
7 }_stacknode;
8
9 typedef struct stackctl
10 {
11 _stacknode *top;
12 int count;
13 }_stackctl;
14
15 void quene(_stackctl *s1,_stackctl *s2);
16 int main()
17 {
18 _stackctl *s1 = (_stackctl *)malloc(sizeof(_stackctl));
19 _stackctl *s2 = (_stackctl *)malloc(sizeof(_stackctl));
20 s1->top = NULL;
21 s1->count = 0;
22 s2->top = NULL;
23 s2->count = 0;
24 quene(s1,s2);
25 }
26 void quene(_stackctl *s1,_stackctl *s2)
27 {
28 int a = 0,t = 0,x = 0;
29 while(1)
30 {
31 printf("please input any key:!
");
32 printf("1:push
");
33 printf("2:pop
");
34 printf("3:exit
");
35 scanf("%d",&a);
36 if(a == 1)
37 push(s1,++t);
38 else if(a == 2)
39 {
40 while(s1->count > 0)
41 {
42 pop(s1,&x);
43 push(s2,x);
44 }
45 pop(s2,&x);
46 printf("%d have pop!
",x);
47 while(s2->count > 0)
48 {
49 pop(s2,&x);
50 push(s1,x);
51 }
52 }
53 else if(a == 3)
54 {
55 while(s1->count > 0)
56 {
57 pop(s1,&x);
58 push(s2,x);
59 }
60 while(s2->count > 0)
61 {
62 pop(s2,&x);
63 printf("%d have pop
",x);
64 }
65 break;
66 }
67 }
68}
69 int push(_stackctl *s,int x)
70 {
71 _stacknode *p;
72 if(s == NULL)
73 return -1;
74 p = (_stacknode *)malloc(sizeof(_stacknode));
75 p->data = x;
76 p->next = s->top;
77 s->top = p;
78 s->count++;
79 return 0;
80 }
81
82 int pop(_stackctl *s,int *x)
83 {
84 _stacknode *p;
85 if(s == NULL)
86 return -1;
87 *x = s->top->data;
88 p = s->top;
89 s->top = s->top->next;
90 free(p);
91 s->count--;
92 return 0;
93 }
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 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에 따라 라이센스가 부여됩니다.