链栈的初始化 入栈 出栈 打印栈中的元素等基础内容

这次我用XCode写的C++,CLion用的不熟练,打断点调试的部分都不熟练,暂且还是用XCode
当前使用版本声明:XCode Version 8.3.3 
1
#include <iostream> 2 using namespace std; 3 4 #define maxSize 1000 5 #define WWStr(str) #str 6 #define WWLine "-------------" 7 8 9 /** 10 链栈结点 11 */ 12 typedef struct LinkStackNode{ 13 LinkStackNode *next; 14 int data; 15 }LinkStackNode; 16 17 /*链栈操作*/ 18 void linkStackOperation(); 19 /*初始化链栈*/ 20 void initLinkStack(LinkStackNode *&linkStack); 21 /*判断栈是否为空*/ 22 int isEmptyLinkStack(LinkStackNode *linkStack); 23 /*链栈的入栈操作*/ 24 int pushLinkStack(LinkStackNode *linkStack,int x); 25 /*链栈的出栈操作*/ 26 int popLinkStack(LinkStackNode *linkStack,int &x); 27 28 /*打印链栈信息*/ 29 void printLinkStack(LinkStackNode *linkStack); 30 31 /*写一些注意信息*/ 32 void notice(); 33 34 int main(int argc, const char * argv[]) { 35 36 //链栈操作 37 linkStackOperation(); 38 39 return 0; 40 } 41 42 43 #pragma mark - 链栈相关操作 44 void linkStackOperation(){ 45 46 cout<<WWLine<<"链栈相关操作"<<WWLine<<endl; 47 LinkStackNode *linkStack; 48 initLinkStack(linkStack); 49 50 pushLinkStack(linkStack,1); 51 pushLinkStack(linkStack,2); 52 pushLinkStack(linkStack,3); 53 54 printLinkStack(linkStack); 55 56 pushLinkStack(linkStack,4); 57 58 isEmptyLinkStack(linkStack); 59 printLinkStack(linkStack); 60 61 int linkStackTopElement = 0; 62 63 popLinkStack(linkStack,linkStackTopElement); 64 printLinkStack(linkStack); 65 popLinkStack(linkStack,linkStackTopElement); 66 printLinkStack(linkStack); 67 popLinkStack(linkStack,linkStackTopElement); 68 printLinkStack(linkStack); 69 70 linkStackTopElement = 10; 71 pushLinkStack(linkStack,linkStackTopElement); 72 printLinkStack(linkStack); 73 popLinkStack(linkStack, linkStackTopElement); 74 popLinkStack(linkStack, linkStackTopElement); 75 popLinkStack(linkStack, linkStackTopElement); 76 printLinkStack(linkStack); 77 pushLinkStack(linkStack,20); 78 printLinkStack(linkStack); 79 80 } 81 82 83 #pragma mark - 初始化链栈 84 void initLinkStack(LinkStackNode *&linkStack){ 85 86 linkStack = (LinkStackNode *)malloc(sizeof(LinkStackNode)); 87 linkStack->next = NULL; 88 } 89 90 #pragma mark - 判断链栈是否为空 91 92 int isEmptyLinkStack(LinkStackNode *linkStack){ 93 94 if(linkStack->next == NULL){ 95 cout<<"链栈为空"<<endl; 96 return 1; 97 }else{ 98 cout<<"链栈不为空"<<endl; 99 return 0; 100 } 101 } 102 103 #pragma mark - 打印链栈信息 104 void printLinkStack(LinkStackNode *linkStack){ 105 106 cout<<WWLine<<WWStr(打印链栈的信息:地址)<<linkStack<<WWLine<<endl; 107 if(linkStack->next == NULL){ 108 cout<<"栈为空"; 109 return; 110 }else{ 111 112 LinkStackNode *p; 113 p = linkStack->next; 114 //注意下边的代码不能有否则的话就会是直接取出来当前的结点的值后就断了 应该让结点指到链栈 不断的情况下才能依次把后边的值都打印出来 115 // p->next = NULL; 116 while(p != NULL){ 117 118 cout<<p->data<<endl; 119 p = p -> next; 120 /*栈后进先出 如果是进栈2 3 那么打印栈的信息会是3 2 121 *输出链栈信息的地方 感觉链栈的操作就类似于一个链表的头插法 122 * */ 123 124 } 125 } 126 127 } 128 129 #pragma mark - 链栈的入栈操作 130 int pushLinkStack(LinkStackNode *linkStack,int x){ 131 //链栈一般认为不存在栈满的情况 132 LinkStackNode *p; 133 p = (LinkStackNode *)malloc(sizeof(LinkStackNode)); 134 135 p->next = NULL; 136 p->data = x; 137 138 p->next = linkStack->next; 139 linkStack->next = p; 140 cout<<"刚刚入链栈"<<linkStack<<"的是:"<<x<<endl; 141 return 1; 142 143 } 144 145 #pragma mark - 链栈的出栈操作 146 int popLinkStack(LinkStackNode *linkStack,int &x){ 147 148 cout<<WWLine<<"出栈操作"<<WWLine<<WWLine<<endl; 149 if(linkStack->next == NULL){ 150 cout<<"栈为空 不能出栈 链栈linkStack:地址"<<linkStack<<endl; 151 return 0; 152 }else{ 153 LinkStackNode *p; 154 p = linkStack->next; 155 x = p->data; 156 linkStack->next = p->next; 157 free(p); 158 cout<<"链栈linkStack:地址"<<linkStack<<"当前出栈元素"<<x<<endl; 159 return 1; 160 } 161 162 } 163 164 165 #pragma mark - 注意事项 166 void notices(){ 167 168 /*对于链栈来说栈的后进先出 如果是进栈2 3 那么打印栈的信息会是3 2 169 *输出链栈信息的地方 感觉链栈的操作就类似于一个链表的头插法 170 * */ 171 }

输出信息如下:

-------------链栈相关操作-------------

刚刚入链栈0x100400590的是:1

刚刚入链栈0x100400590的是:2

刚刚入链栈0x100400590的是:3

-------------打印链栈的信息:地址0x100400590-------------

3

2

1

刚刚入链栈0x100400590的是:4

链栈不为空

-------------打印链栈的信息:地址0x100400590-------------

4

3

2

1

-------------出栈操作--------------------------

链栈linkStack:地址0x100400590当前出栈元素4

-------------打印链栈的信息:地址0x100400590-------------

3

2

1

-------------出栈操作--------------------------

链栈linkStack:地址0x100400590当前出栈元素3

-------------打印链栈的信息:地址0x100400590-------------

2

1

-------------出栈操作--------------------------

链栈linkStack:地址0x100400590当前出栈元素2

-------------打印链栈的信息:地址0x100400590-------------

1

刚刚入链栈0x100400590的是:10

-------------打印链栈的信息:地址0x100400590-------------

10

1

-------------出栈操作--------------------------

链栈linkStack:地址0x100400590当前出栈元素10

-------------出栈操作--------------------------

链栈linkStack:地址0x100400590当前出栈元素1

-------------出栈操作--------------------------

栈为空不能出栈链栈linkStack:地址0x100400590

-------------打印链栈的信息:地址0x100400590-------------

栈为空刚刚入链栈0x100400590的是:20

-------------打印链栈的信息:地址0x100400590-------------

20

Program ended with exit code: 0



  如有错误 敬请指正

 

posted on 2017-08-18 14:23  ITCoderW  阅读(4642)  评论(0编辑  收藏  举报

导航