拖了很久,還是把鏈棧寫了。鏈棧基本操作與順序棧差不多,可是鏈棧彈出的時候,太麻煩,需要遍曆整個鏈棧一遍,所以時間複雜度大於順序棧的操作。
#include <stdio.h> #include <stdlib.h>#define STACK_INIT_SIZE 100#define STACKINCREAMENT 10#define OVERFLOW -1#define ERROR 0#define OK 1typedef 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.csdn.net/d_fur/article/details/7872192