1. 程式人生 > >5 線性表-棧-鏈式存儲

5 線性表-棧-鏈式存儲

type empty -- iostream top sin ext include cout

頭大……

棧是一種功能受限的線性表

1、基本功能實現

  1 #include<stdio.h>
  2 #include<stdlib.h>
  3 #include<iostream>
  4 using namespace std;
  5 #define TRUE 1
  6 #define FALSE 0
  7 #define OK 1
  8 #define ERROR 0
  9 #define OVERFLOW -2
 10 #define STACK_INIT_SIZE 100//存儲空間的初始分配量
 11 #define STACKINCREMENT 10//
存儲空間分配增量 12 13 typedef int Status; 14 typedef int Selemtype; 15 typedef struct node 16 { 17 int data; 18 struct node *next; 19 } Stack; 20 21 22 Status IsEmpty(Stack *s) 23 { 24 if(s->next==NULL) 25 { 26 return TRUE; 27 } 28 return FALSE; 29 } 30
void InitStack(Stack *s) 31 { 32 s->next=NULL;//將棧頂設為空 33 } 34 int Push(Stack *s,Selemtype e) 35 { 36 //創造新的節點 存放傳入的e 37 Stack *p; 38 p=(Stack*)malloc(sizeof(Stack)); 39 if(p==NULL) 40 { 41 return 0; 42 } 43 p->data=e; 44 p->next=s->next;
45 s->next=p; 46 return OK; 47 } 48 Status Pop(Stack *top,Selemtype &e) 49 { 50 if(IsEmpty(top)) return 0; 51 Stack *p; 52 p=top->next;//棧頂下面第一個節點是要出棧的 53 e=p->data; 54 top->next=p->next;//棧內元素的前移 55 free(p); 56 return OK; 57 } 58 void travelStack(Stack *s) 59 { 60 Stack *p=s->next; 61 printf("the elemet in the stack:\n"); 62 while(p) 63 { 64 printf("%d ",p->data); 65 p=p->next; 66 } 67 } 68 int StackLength(Stack *s) 69 { 70 Stack *p=s->next; 71 int countt=0; 72 while(p) 73 { 74 countt++; 75 p=p->next; 76 } 77 return countt; 78 } 79 void ClearStack(Stack *s) 80 { 81 int x; 82 while(Pop(s,x)) 83 { 84 printf("%d ",x); 85 } 86 cout<<endl; 87 free(s); 88 } 89 90 91 int main() 92 { 93 int a; 94 Stack *top=(Stack*)malloc(sizeof(Stack));//生成一個棧頂指針 95 InitStack(top); 96 int c=5; 97 while(c--) 98 { 99 cin>>a; 100 Push(top,a); 101 } 102 travelStack(top); 103 cout<<endl; 104 105 int x; 106 Pop(top,x); 107 cout<<"The ele that you delete is "<<x<<" ."<<endl; 108 x=StackLength(top); 109 cout<<x; 110 cout<<endl; 111 cout<<"Now pop all the data and clear the stack:"<<endl; 112 ClearStack(top); 113 return 0; 114 }

5 線性表-棧-鏈式存儲