拖了很久,还是把链栈写了。链栈基本操作与顺序栈差不多,可是链栈弹出的时候,太麻烦,需要遍历整个链栈一遍,所以时间复杂度大于顺序栈的操作。
#include <stdio.h>
#include <stdlib.h>
#define STACK_INIT_SIZE 100
#define STACKINCREAMENT 10
#define OVERFLOW -1
#define ERROR 0
#define OK 1
typedef int Status;
typedef int ElemType;
typedef struct Node
{
ElemType data;
Node *next;
} Node;
typedef struct stk
{
Node* head;
Node* tail;
}stk;
Status StackInit(stk &ss)
{
ss.head = (Node*)malloc(sizeof(Node));
if (ss.head == NULL) return 0;
ss.tail = ss.head;
return 1;
}
Status Push(stk &ss, ElemType e)
{
Node *temp;
temp = (Node*)malloc(sizeof(Node));
if (temp == NULL) return 0;
temp->data = e;
ss.head->next = temp;
ss.head = temp;
return 1;
}
Status Top(stk &ss, ElemType &e)
{
if (ss.head == ss.tail)
return 0;
e = ss.head->data;
return 1;
}
Status Pop(stk &ss)
{
if (ss.head == ss.tail)
return 0;
Node *temp;
temp = ss.tail;
while(1)
{
if (temp->next == ss.head)
{
free(ss.head);
ss.head = temp;
break;
}
temp = temp->next;
}
return 1;
}
int main()
{
stk ss;
StackInit(ss);
printf("how many\n");
int n, i, e;
scanf("%d", &n);
for (i = 0;i < n; i++)
{
scanf("%d", &e);
Push(ss,e);
}
for (i = 0; i < n; i++)
{
Top(ss,e);
Pop(ss);
printf("%d ", e);
}
printf("\n");
system("pause");
}
下面链接顺序栈的实现: http://blog.youkuaiyun.com/d_fur/article/details/7872192