어떻게 창고 로 대열 의 기능 을 실현 합 니까

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 }

좋은 웹페이지 즐겨찾기