두 스 택 은 하나의 대기 열 을 실현 하고 C 언어 가 실현 되 며 대기 열 은 신축 할 수 있 으 며 임의의 수의 요 소 를 수용 할 수 있 습 니 다.
16507 단어 C 언어
2. 코드:
1. 헤더 파일: stackto_quue. h: 대기 열, 스 택 의 데이터 구조 와 각종 작업 함수 가 봉인 되 었 습 니 다.
1 #ifndef STACK_TO_QUEUE_H
2 #define STACK_TO_QUEUE_H
3
4 #include<stdio.h>
5 #include<stdlib.h>
6
7 #define ALLOC_SIZE 512
8 #define ElemType int
9
10 typedef struct sqstack
11 {
12 ElemType *top; //
13 ElemType *base; //
14 int stack_size; //
15 }SqStack; //
16
17 typedef struct sqqueue
18 {
19 SqStack front; // , ,
20 SqStack rear; // ,
21 }SqQueue;
22
23 /* */
24 void InitStack(SqStack *s)
25 {
26 if((s->top=(ElemType*)malloc(ALLOC_SIZE*sizeof(ElemType)))==NULL)
27 {
28 printf("stack malloc error
");
29 exit(1);
30 }
31 s->base=s->top;
32 s->stack_size=ALLOC_SIZE;
33 }
34
35 /* , 0, 1*/
36 int pop_stack(SqStack *s,ElemType *data)
37 {
38 if(s->top!=s->base)
39 {
40 s->top--;
41 *data=*s->top;
42 return 1;
43 }
44 else // 0,
45 {
46 return 0;
47 }
48 }
49
50 /* */
51 void push_stack(SqStack *s,ElemType data)
52 {
53 if((s->top-s->base)>=s->stack_size)
54 {
55 if((s->base=(ElemType *)realloc(s->base,(s->stack_size+ALLOC_SIZE)*sizeof(ElemType)))==NULL)
56 {
57 printf("stack realloc error
");
58 exit(1);
59 }
60 else
61 {
62 s->top=s->base+s->stack_size;
63 s->stack_size+=ALLOC_SIZE;
64 }
65 }
66 *(s->top)=data;
67 s->top++;
68 }
69
70 /* */
71 void InitQueue(SqQueue *q)
72 {
73 SqStack A,B;
74
75 InitStack(&A);
76 InitStack(&B);
77 q->front=B; // B
78 q->rear=A; // A
79 }
80
81 /* */
82 void push_queue(SqQueue *q,ElemType data)
83 {
84 push_stack(&q->rear,data);
85 }
86
87 /* , 0, 1*/
88 int pop_queue(SqQueue *q,ElemType *data)
89 {
90 if((pop_stack(&q->front,data))==0) // ,
91 {
92 while((pop_stack(&q->rear,data))!=0)
93 {
94 push_stack(&q->front,*data);
95 }
96 }
97 else // , 1
98 {
99 return 1;
100 }
101 if((pop_stack(&q->front,data))==0) // ,
102 {
103 return 0;
104 }
105 else
106 {
107 return 1;
108 }
109 }
110 #endif
2. 주 함수: main. c: 테스트 용 으로 만 for 순환 을 통 해 1000 개의 수 0 - 999 를 대기 열 에 넣 고 인쇄 합 니 다.
1 #include<stdio.h>
2 #include"stack_to_queue.h"
3
4 int main()
5 {
6 SqQueue q;
7 int i,data;
8
9 InitQueue(&q);
10 for(i=0;i<1000;i++)
11 {
12 push_queue(&q,i);
13 }
14 while((pop_queue(&q,&data))!=0)
15 {
16 printf("%d ",data);
17 }
18
19 return 0;
20 }
전에 썼 을 때 실 수 를 했 어 요. stackto_quue. h 의 62 줄 은 realloc 함 수 를 사용 하여 메모 리 를 재배 치 한 후에 top 포인터 도 새로운 위 치 를 가리 키 려 고 합 니 다. 저 는 이 단 계 를 빠 뜨 려 서 실 수 를 했 습 니 다. 오랫동안 검 사 했 습 니 다. 마지막 해결 과정 은 다음 과 같 습 니 다. http://q.cnblogs.com/q/54337/
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
C 언어 체인 시계는 뱀을 탐식하는 작은 게임을 실현한다본고의 실례는 여러분에게 C 언어 체인표가 뱀 탐식 게임을 실현하는 구체적인 코드를 공유하여 참고하도록 하였으며, 구체적인 내용은 다음과 같다. 프로젝트 이름: 뱀놀이 운영 환경: Linux 프로그래밍 언어: C 언...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.