동적 스 택 에 대한 분석

스 택 은 데이터 구조 에 속 하고 본질 적 으로 선형 표 에 속 하 며 제 한 된 선형 표 일 뿐이다.
            우 리 는 오늘 동적 스 택, 즉 체인 스 택 과 관련 된 문 제 를 토론 하 러 왔 다.
            
# include 
# include 
# include 

typedef struct Node
{
	int data;
	struct Node* pNext;
}NODE, *PNODE;

typedef struct Stack
{
	PNODE pTop;    //  
	PNODE pBottom; //  
}STACK, *PSTACK;
//     
void InitStack(PSTACK pS)
{
	pS->pTop = (PNODE)malloc(sizeof(NODE));
	if(NULL == pS->pTop)
	{
		printf("ERROR 
"); exit(-1); } else { pS->pBottom = pS->pTop; pS->pBottom->pNext = NULL; //pS->pTop->pNext = NULL; } } // void TraverseStack(PSTACK pS) { printf("Now start traverse the stack elem : "); PNODE p = pS->pTop; while(p != pS->pBottom) { printf("%d  ", p->data); p = p->pNext; } printf("
"); } // void PushStack(PSTACK pS, int Val) { PNODE pNew = (PNODE)malloc(sizeof(NODE)); pNew->data = Val; pNew->pNext = pS->pTop; pS->pTop = pNew;  } // bool IsEmptyStack(PSTACK pS) { if(pS->pTop == pS->pBottom) { return true; } else { return false; } } // int PopStack(PSTACK  pS, int * pVal) { if(IsEmptyStack(pS)) { printf("ERROR stack is  empty  
"); exit(-1); } else { PNODE r = pS->pTop; *pVal = r->data; pS->pTop = r->pNext; free(r); r = NULL; } return true; } // void ClearStack(PSTACK pS) { printf("Now start clear the stack  ... "); if(IsEmptyStack(pS)) { return ; } PNODE  p = pS->pTop; PNODE  q = NULL; while(p != pS->pBottom) { q = p->pNext; free(p); p = q; } pS->pTop = pS->pBottom; puts("
"); } // int main(void) { STACK   S; InitStack(&S);// // PushStack(&S, 1); PushStack(&S, 2); PushStack(&S, 3); PushStack(&S, 4); // TraverseStack(&S); // int val = 0; if(PopStack(&S, &val)) { printf("pop stack top  elem is %d  

", val); } // TraverseStack(&S); // ClearStack(&S); // TraverseStack(&S); return 0; }

좋은 웹페이지 즐겨찾기