链栈的实现
2012-08-18 10:37
204 查看
拖了很久,还是把链栈写了。链栈基本操作与顺序栈差不多,可是链栈弹出的时候,太麻烦,需要遍历整个链栈一遍,所以时间复杂度大于顺序栈的操作。
下面链接顺序栈的实现:/article/3631353.html
#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"); }
下面链接顺序栈的实现:/article/3631353.html