鏈棧的實質還是鏈表,對於一般的鏈表創建從後插入,鏈棧是將鏈表從前插入。
0 插入1 爲1 0 ,再插入2 爲 2 1 0。
鏈棧的彈出也遵循棧的約定先入後出
看下面示例
#include "stdafx.h"
#include <stdlib.h>
#include <string.h>
typedef struct LinkStack
{
int data;
LinkStack* pNext;
}LinkStack;
LinkStack* PushStack()
{
LinkStack* pHead = (LinkStack*)malloc(sizeof(LinkStack));
memset(pHead,0,sizeof(LinkStack));
while(1)
{
LinkStack* pNewItem = (LinkStack*)malloc(sizeof(LinkStack));
memset(pNewItem,0,sizeof(LinkStack));
printf("input data: ");
scanf("%d",&pNewItem->data);
if(pNewItem->data == 0)
break;
pNewItem->pNext = pHead;
pHead = pNewItem;
printf(" %d pushed\n",pNewItem->data);
}
return pHead;
}
void ShowStack(LinkStack* pHead)
{
printf("--------------------------------\n");
LinkStack* pTemp = pHead;
while(pTemp->pNext != NULL)
{
printf("%d ",pTemp->data);
pTemp = pTemp->pNext;
}
printf("\n");
}
LinkStack* PopStack(LinkStack* pHead)
{
int *item = NULL;
while(pHead->pNext != NULL)
{
item = &pHead->data;
pHead = pHead->pNext;
printf("%d poped\n",*item);
}
return pHead;
}