由于写链栈时用的是base向top指向,导致时间增加,虽然也能实现,但是看着特蛋疼,推荐看2.1.2的链栈的设计与实现
#include <stdlib.h>
#include <stdio.h>
#define Stack_Length 6
#define OK 1
#define ERROR 0
typedef int SElemType;
typedef struct SNode
{
SElemType data;
struct SNode *next;
}SNode, *LinkStack;
void CreateTwo(LinkStack &head, LinkStack &top, int n)
{
int i;
SNode *p;
head = (LinkStack)malloc(sizeof(SNode));
head->next = NULL;
top = head;
printf("Please input the data for LinkList Nodes:\n");
for(i = n; i > 0; i--)
{
p = (SNode*)malloc(sizeof(SNode));
scanf("%d", &p->data);
top->next = p;
top = p;
}
p->next = NULL;
}
int Push(LinkStack &top, SElemType e)
{
SNode *q;
q = (LinkStack)malloc(sizeof(SNode));
if(!q)
{
printf("Overflow\n");
return ERROR;
}
q->data = e;
top->next = q;
top = q;
top->next = NULL;
return OK;
}
int Pop(LinkStack &base, LinkStack &top, SElemType &e)
{
SNode *q;
top = base;
if(!base->next) { printf("ERROR\n"); return ERROR; }
else
{
while(top->next->next)
{
top = top->next;
}
e = top->next->data;
q = top->next;
top->next = q->next;//把q->next指向的空给top->next;
free(q);
}
return(OK);
}
//***********测试程序********************//
int main()
{
int e;
LinkStack base;
LinkStack top;
//测试能否建立链表
CreateTwo(base, top, 3);
LinkStack p;
printf("\nThe old LinkStack is(bottom to top):\n");
p = base;
while(p->next)
{
p = p->next;
printf("%d ",p->data);
}
printf("\nPlease input the data to push:");
scanf("%d", &e);
//测试入栈功能
if(Push(top, e))
printf("success to push");
top = base;
printf("\nThe new LinkStack is:\n");
while(top->next)
{
top = top->next;
printf("%d ", top->data);
}
printf("\n");
//测试出栈功能
if(Pop(base, top, e)) printf("Pop succeed!\n");
printf("The poped is %d\n", e);
return 0;
}
原文地址:http://blog.csdn.net/bao_libra/article/details/45916813