您的位置:首页 > 其它

链栈的相关操作

2012-11-23 21:43 155 查看
/*
2012年11月23日9:10:12
链栈的基本操作
InitStack    初始化链栈
*/

#include<stdio.h>
#include<stdlib.h>

//////////定义结构体//////////////////
typedef struct Node
{
struct Node *pNext;
int data;
}NODE,*PNODE;

typedef struct Stack
{
PNODE pTop;
int count;
}LinkStack,*PLinkStack;

////////////函数声明//////////////////////
void InitStack(PLinkStack);
void Push(int val,PLinkStack pS);
void Traverse(PLinkStack pS);
void Pop(PLinkStack pS);

/////////////主函数///////////////////
int main(void)
{
LinkStack S;
InitStack(&S);
Push(3,&S);
Push(2,&S);
Push(4,&S);
Push(5,&S);
Traverse(&S);
Pop(&S);
Traverse(&S);
return 0;
}

///////////初始化链栈//////////////////
void InitStack(PLinkStack pS)
{

pS->pTop = (PNODE)malloc(sizeof(NODE));
if(NULL == pS->pTop)
{
printf("分配内存失败\n");
exit(-1);
}
else
{
pS->pTop->pNext = NULL;
pS->count = 0;
}
}

////////////入栈///////////////
void Push(int val,PLinkStack pS)
{
PNODE pNew;
pNew = (PNODE)malloc(sizeof(NODE));
if(NULL == pNew)
{
printf("分配内存失败\n");
exit(-1);
}
else
{
pNew->data= val;
pNew->pNext = pS->pTop;
pS->pTop = pNew;
pS->count++;
}
}

///////////遍历输出////////////////
void Traverse(PLinkStack pS)
{
PNODE pTemp = pS->pTop;
if(NULL == pTemp->pNext)
{
printf("空栈!\n");
}
else
{
while(NULL!=pTemp->pNext)
{
printf("%d\n",pTemp->data);
pTemp = pTemp->pNext;
}
}
return;
}

////////////出栈////////////////////
void Pop(PLinkStack pS)
{
PNODE pTemp = pS->pTop;
if(NULL == pTemp->pNext)
{
printf("空栈!\n");
}
else
{
printf("出栈元素为%d\n",pTemp->data);
pS->pTop = pS->pTop->pNext;
free(pTemp);
pS->count--;

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: