鏈棧的常用操作(初始化,入棧,出…
阿新 • • 發佈:2019-01-28
#include
#include
typedef struct Node
{
int data;
struct Node *pNext;
}NODE, *PNODE;
typedef struct Stack
{
PNODE pTop;
PNODE pBottom;
}STACK, *PSTACK;
void init_stack(PSTACK);//初始化鏈棧
void push_stack(PSTACK,int);//元素入棧
void is_empty_stack(PSTACK);//判斷棧是否為空
void traverse_stack(PSTACK);//遍歷棧
void pop_stack(PSTACK);//元素出棧
void clear_stack(PSTACK);//清空棧
int main(int argc, const char * argv[])
{
STACK S;
init_stack(&S);
push_stack(&S,1);
push_stack(&S,2);
printf("棧中的元素為:");
traverse_stack(&S);
pop_stack(&S);
printf("棧中的元素為:");
traverse_stack(&S);
clear_stack(&S);
printf("棧中的元素為:");
traverse_stack(&S);
return 0;
}
//初始化鏈棧
void init_stack(PSTACK pS)
{
pS->pTop = (PNODE)malloc(sizeof(NODE));
if(NULL == pS->pTop){
printf("動態分配記憶體失敗!!!\n");
exit(-1);
}
else{
pS->pBottom = pS->pTop;
pS->pTop->pNext = NULL;//同時pS->pBottom->pNext = NULL
}
}
//元素入棧
void push_stack(PSTACK pS,int val)
{
PNODE pNew = (PNODE)malloc(sizeof(NODE));
pNew->data = val;
pNew->pNext = pS->pTop;
pS->pTop = pNew;
return;
}
void is_empty_stack(PSTACK pS)
{
if (pS->pTop == pS->pBottom) {
printf("棧為空!!!\n");
exit(-1);
}
return;
}
//遍歷棧
void traverse_stack(PSTACK pS)
{
is_empty_stack(pS);
PNODE pNew = pS->pTop;
while (pNew != pS->pBottom) {
printf("%d ", pNew->data);
pNew = pNew->pNext;
}
printf("\n");
return;
}
//元素出棧一次,並把出棧的元素存入pVal所指向的變數中
void pop_stack(PSTACK pS)
{
is_empty_stack(pS);
int pVal;
pVal = pS->pTop->data;
pS->pTop = pS->pTop->pNext;
printf("出棧的元素為:%d\n",pVal);
return;
}
//清空棧
void clear_stack(PSTACK pS)
{
is_empty_stack(pS);
PNODE p = pS->pTop;
PNODE q = NULL;
#include
typedef struct Node
{
int data;
struct Node *pNext;
}NODE, *PNODE;
typedef struct Stack
{
PNODE pTop;
PNODE pBottom;
}STACK, *PSTACK;
void init_stack(PSTACK);//初始化鏈棧
void push_stack(PSTACK,int);//元素入棧
void is_empty_stack(PSTACK);//判斷棧是否為空
void traverse_stack(PSTACK);//遍歷棧
void pop_stack(PSTACK);//元素出棧
void clear_stack(PSTACK);//清空棧
int main(int argc, const char * argv[])
{
STACK S;
init_stack(&S);
push_stack(&S,1);
push_stack(&S,2);
printf("棧中的元素為:");
traverse_stack(&S);
pop_stack(&S);
printf("棧中的元素為:");
traverse_stack(&S);
clear_stack(&S);
printf("棧中的元素為:");
traverse_stack(&S);
return 0;
}
//初始化鏈棧
void init_stack(PSTACK pS)
{
pS->pTop = (PNODE)malloc(sizeof(NODE));
if(NULL == pS->pTop){
printf("動態分配記憶體失敗!!!\n");
exit(-1);
}
else{
pS->pBottom = pS->pTop;
pS->pTop->pNext = NULL;//同時pS->pBottom->pNext = NULL
}
}
//元素入棧
void push_stack(PSTACK pS,int val)
{
PNODE pNew = (PNODE)malloc(sizeof(NODE));
pNew->data = val;
pNew->pNext = pS->pTop;
pS->pTop = pNew;
return;
}
void is_empty_stack(PSTACK pS)
{
if (pS->pTop == pS->pBottom) {
printf("棧為空!!!\n");
exit(-1);
}
return;
}
//遍歷棧
void traverse_stack(PSTACK pS)
{
is_empty_stack(pS);
PNODE pNew = pS->pTop;
while (pNew != pS->pBottom) {
printf("%d ", pNew->data);
pNew = pNew->pNext;
}
printf("\n");
return;
}
//元素出棧一次,並把出棧的元素存入pVal所指向的變數中
void pop_stack(PSTACK pS)
{
is_empty_stack(pS);
int pVal;
pVal = pS->pTop->data;
pS->pTop = pS->pTop->pNext;
printf("出棧的元素為:%d\n",pVal);
return;
}
//清空棧
void clear_stack(PSTACK pS)
{
is_empty_stack(pS);
PNODE p = pS->pTop;
PNODE q = NULL;