2011년 3월 24일 목요일

c] 환형 큐 소스

gcc 용이다. 인터넷 돌아다니는거랑 위키피데아 꺼랑 뽕짝.

#include <stdio.h>
#define MAX_VAL 100;

int cnt=0,chk,max=MAX_VAL;
struct node{
        char * data;
        struct node * link;
};
char *gets (char *s)
{
        char * ch = s;
        int k;
        /* until we read a newline */
        while ((k = getchar ()) != '\n') {
                if (k == EOF) {
                        /* EOF at start of line or errors other than EOF return NULL */
                        if (ch == s || !feof(stdin))
                                return NULL;
                        break;
                }
                /* character is stored at address, and pointer is incremented */
                *ch++ = k;
        }
        /* newline dropped and Null-terminating character added */
        *ch = '\0';
        /* return original pointer */
        return s;
}

void push(struct node **queue){
        struct node *bottom=NULL;
        struct node *tmp;
        char buff[1024];
        tmp=(struct node *)malloc(1*sizeof(struct node));

        if(chk==max){
                printf("queue is full!!\n");
                return;
        }
        printf("PUSH > ");
        fflush(stdin);
        gets(buff);
        tmp->data=(char*)malloc((strlen(buff)+1)*sizeof(char));
        strcpy(tmp->data,buff);
        tmp->link=NULL;
        if(*queue == NULL){
                *queue = tmp;
                printf("queue의 (1)에 PUSH되었습니다.\n");
        }else{
                bottom=*queue;
                while(1){
                        cnt++;
                        if(bottom->link==NULL){break;}
                        bottom=bottom->link;
                }
                bottom->link=tmp;
                chk=cnt+1;
                printf("queue의 (%d)에 PUSH되었습니다.\n",chk);
                cnt=0;
        }
}
void pop(struct node **queue){
        if(*queue == NULL){
                printf("queue is empty!!\n");
                return;
        }else{
                printf("POP   queue[1] > %s\n",(*queue)->data);
                if(chk==1){
                        (*queue)=NULL;
                        printf("last!!!\n");
                }else{
                        (*queue)=(*queue)->link;
                }
                chk--;
        }
}
int main(void){
        struct node *queue=NULL;
        int select;
        while(1){
                printf("  [..queue..]\n");
                printf("==============\n");
                printf("  1. PUSH\n");
                printf("  2. POP\n");
                printf("  0. END\n");
                printf("==============\n");
                printf("> ");
                fflush(stdin);
                scanf("%d",&select);
                switch(select){
                        case 0:
                                printf("good bye~\n");
                                if(queue!=NULL){
                                        while(1){
                                                if(queue){
                                                        free(queue->data);
                                                }else if(queue->link==NULL){break;}
                                                if(queue->link==NULL){break;}
                                                queue=queue->link;
                                        }
                                        free(queue);
                                        printf("queue is clear!!\n");
                                }
                                return 0;
                        case 1:
                                push(&queue);
                                break;
                        case 2:
                                pop(&queue);
                                break;
                        default :
                                printf("input error!!\n");
                                break;
                }
        }
        return 0;
}

댓글 없음:

댓글 쓰기

국정원의 댓글 공작을 지탄합니다.

UPBIT is a South Korean company, and people died of suicide cause of coin investment.

 UPBIT is a South Korean company, and people died of suicide cause of coin. The company helps the people who control the market price manipu...