コード例 #1
0
/*
	함수명: testStringReverse
	매개변수: 없음
	기능: string reverse
	예) "ABCD"를 "DCBA"의 순서로 출력
	comments
	초기에 용량 1인 stack 생성
	10개 원소를 하나씩 push
	stack이 empty가 될때까지 pop
*/
void	testStringReverse()
{
	char	str[] = "ABCD";
	int		i;

	if (createCharStack(1) != 0) return;

	for (i = 0; i < strlen(str); i++)
		push(str[i]);

	while (!isEmpty()) printf("%c", pop());
	printf("\n");

	freeStack();
}
コード例 #2
0
int infixToPostfix(const char from[], char to[])
{
    CharStack *stack = createCharStack();

    int c = EOF;
    int i = 0;
    int j = 0;
    while (true)
    {
        c = from[i];
        ++i;
        if (c == '\0')
            break;
        switch (c)
        {
            case '1': case '2': case '3': case '4': case '5':
            case '6': case '7': case '8': case '9': case '0':
            {
                to[j] = c;
                ++j;
                break;
            }
            case '(':
            {
                pushChar(stack, '(');
                break;
            }
            case ')':
            {
                while ((c = popChar(stack)) != '(' && c != EOF)
                {
                    to[j] = c;
                    ++j;
                }
                if (c == EOF)
                {
                    deleteCharStack(stack);
                    to[j] = '\0';
                    return 1;
                }
                break;
            }
            case '+': case '-': case '*': case '/':
            {
                int c1 = EOF;
                while ((c1 = popChar(stack)) != EOF && c1 != '(' && priority(c) <= priority(c1))
                {
                    to[j] = c1;
                    ++j;
                }
                if (c1 != EOF)
                    pushChar(stack, c1);
                pushChar(stack, c);
                break;
            }
            default:
            {
                deleteCharStack(stack);
                to[j] = '\0';
                return 2;
            }
        } //switch
    } //while
    while ((c = popChar(stack)) != EOF && c != '(')
    {
        to[j] = c;
        ++j;
    }
    deleteCharStack(stack);
    to[j] = '\0';
    if (c == '(')
        return 1;
    return 0;
}