๐ก
์คํ์ ์ ์ฉ ๋ณธ๋ฌธ
์ด์ ํฌ์คํธ์์ ์ฌ์ฉํ linkedStack ์ ์ด์ฉํ ํค๋ํ์ผ
#ifndef _LINKEDSTACK_
#define _LINKEDSTACK_
typedef struct LinkedStackNodetype {
char data;
struct LinkedStackNodetype *pLink; //๋งํฌ
} LinkedStackNode;
typedef struct LinkedStacktype {
int currentCount;
LinkedStackNode *pTop; // ํ ๋
ธ๋์ ํฌ์ธํฐ
} LinkedStack;
LinkedStack *createLinkedStack(void);
int pushLS(LinkedStack *pStack, char data);
int isLinkedStackEmpty(LinkedStack *pStack);
LinkedStackNode *popLS(LinkedStack *pStack);
LinkedStackNode *peekLS(LinkedStack *pStack);
void deleteLinkedStack(LinkedStack *pStack);
void displayLinkedStack(LinkedStack *pStack);
#endif
์ ์ฌ์ฉํ์ฌ ๊ฐ๋จํ ์์ ๋ฅผ ๋ง๋ค์ด๋ณด์
1. ์ญ์์ธ ๋ฌธ์์ด ๋ง๋ค๊ธฐ
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "linkedstack.h"
char *reverseString(char *pSource)
{
char *pReturn = NULL;
int i = 0, size = 0;
LinkedStack *pStack = NULL;
LinkedStackNode *pNode = NULL;
pStack = createLinkedStack();
if (pStack != NULL)
{
while (pSource[size] != 0)
{
pushLS(pStack, pSource[size]);
size++;
}
pReturn = (char *)malloc(sizeof(char) * (size + 1));
memset(pReturn, 0, sizeof(char) * (size + 1));
while (i < size)
{
pNode = popLS(pStack);
if (pNode != NULL)
{
pReturn[i] = pNode->data;
free(pNode); // pop๋ ๋
ธ๋์ ๋
ธ๋์ ๋ํ ๋ฉ๋ชจ๋ฆฌ ํด์
}
i++;
}
deleteLinkedStack(pStack);
}
return (pReturn);
}
int main(void)
{
char szSource[] = "ABCD";
char *pszReverse = reverseString(szSource);
if (pszReverse != NULL)
{
printf("[%s]=> [%s]\n", szSource, pszReverse);
free(pszReverse); // ํจ์ ํธ์ถ ๊ฒฐ๊ณผ๋ก ์ ๋ฌ๋ฐ์ ๋ฌธ์์ด ๋ฉ๋ชจ๋ฆฌ ํด์
}
return (0);
}
2. ์์์์ ๊ดํธ ๊ฒ์ฌํ๊ธฐ
#include <stdio.h>
#include <stdlib.h>
#include "linkedstack.h"
int checkBracketMatching(char *pSource)
{
int ret = 0, i = 0;
char symbol = '\0', checkSymbol = '\0';
LinkedStack *pStack = NULL;
LinkedStackNode *pNode = NULL;
pStack = createLinkedStack();
if (pStack != NULL)
{
while (pSource[i] != 0 && ret == 0)
{
symbol = pSource[i];
switch (symbol)
{
case '(':
case '[':
case '{':
pushLS(pStack, symbol); // ์ฌ๋ ๊ดํธ ๋ง๋๋ฉด push
break;
case ')':
case ']':
case '}':
pNode = popLS(pStack); // ๋ซ๋ ๊ดํธ ๋ง๋๋ฉด pop
if (pNode == NULL) // ๋ซ๋ ๊ดํธ๊ฐ ๋ ๋ง์ ๊ฒฝ์ฐ
ret = 1;
else
{
checkSymbol = pNode->data; // ๋ง์ง๋ง ์ฌ๋ ๊ดํธ์ ์ฒซ๋ฒ์งธ ๋ซ๋ ๊ดํธ ๋น๊ต
if ((symbol == ')' && checkSymbol == '(')
|| (symbol == ']' && checkSymbol == '[')
|| (symbol == '}' && checkSymbol == '{'))
ret = 0;
else // ๊ดํธ์ ์์ด ๋ง์ง ์์ ๊ฒฝ์ฐ
ret = 2;
}
free(pNode);
break;
}
i++;
}
if (ret == 0 && isLinkedStackEmpty(pStack) == 0) // ์ฌ๋ ๊ดํธ๊ฐ ๋ ๋ง์ ๊ฒฝ์ฐ
ret = 3;
deleteLinkedStack(pStack);
}
return (ret);
}
int main(void)
{
int checkResult = 0, i = 0;
char szExpresstionStr[][50] = {
"( A + B ) * C",
"{ ( A + B ) * C } * D",
"( A + B ) * C )", // ์ฌ๋ ๊ดํธ ๋ถ์กฑ
"( ( A + B ) * C", // ๋ซ๋ ๊ดํธ ๋ถ์กฑ
"{ ( A + B } ) * C * D" // ๊ดํธ ๋ฌธ์๊ฐ ๋ง์ง ์์
};
for (i = 0; i < sizeof(szExpresstionStr) / sizeof(szExpresstionStr[0]); i++)
{
checkResult = checkBracketMatching(szExpresstionStr[i]);
if (checkResult == 0)
printf("SUCCESS, %s\n", szExpresstionStr[i]);
else
printf("FAIL-[%d], %s\n", checkResult, szExpresstionStr[i]);
}
return (0);
}
'์๋ฃ๊ตฌ์กฐ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
ํ Queue (0) | 2021.09.01 |
---|---|
์คํ Stack (0) | 2021.08.15 |
์ฐ๊ฒฐ๋ฆฌ์คํธ์ ํ์ฅ Circular linked list, Double linked list (0) | 2021.07.19 |
์ฐ๊ฒฐ ๋ฆฌ์คํธ Linked list (0) | 2021.07.17 |
๋ฐฐ์ด ๋ฆฌ์คํธ Array list (0) | 2021.07.16 |