链栈的定义
其实跟链表的结构是一样的,连同操作基本一样,但是链栈只能在一端进行删除节点和增加节点.
typedef struct LNode
{
struct LNode *next;
int data;
int maxsize;
}LNode,* LinkStack;
头插法建立链表(带头节点)
LinkStack link_HeadInsert()
{
LinkStack head=(LinkStack)malloc(sizeof(LinkStack));
head->next=NULL;
int data;
scanf("%d",&data);
while(data!=9999)
{
LNode *node=(LNode *)malloc(sizeof(LNode));
node->data=data;
node->next=head->next;
head->next=node;
scanf("%d",&data);
}
return head;
}
打印链栈
void printLinkList(LinkStack L)
{
int i=1;
LNode *node=L->next;
while(node!=NULL)
{
printf("第%d位:%d\n",i,node->data);
node=node->next;
i++;
}
}
压栈
bool PushStack(LinkStack L,int e)
{
LNode *node=L;
if(node!=NULL)
{
LNode *newNode=(LNode *)malloc(sizeof(LNode));
newNode->data=e;
newNode->next=node->next;
node->next=newNode;
return true;
}else
{
return false;
}
}
退栈
bool PopStack(LinkStack L)
{
LNode *node=L->next;
if(node!=NULL)
{
L->next=node->next;
free(node);
return true;
}else
{
return false;
}
}
测试代码
int main(int argc, char* argv[])
{
LinkStack L= link_HeadInsert();
printLinkList(L);
PushStack(L,666);
printf("PushStack(L,666)\n");
printLinkList(L);
PopStack(L);
printf("PopStack(L)\n");
printLinkList(L);
return 0;
}
测试结果
111
222
333
444
555
9999
第1位:555
第2位:444
第3位:333
第4位:222
第5位:111
PushStack(L,666)
第1位:666
第2位:555
第3位:444
第4位:333
第5位:222
第6位:111
PopStack(L)
第1位:555
第2位:444
第3位:333
第4位:222
第5位:111
Press any key to continue