链栈的初始化 入栈 出栈 打印栈中的元素等基础内容
来源:互联网 发布:数据库管理员考试 编辑:程序博客网 时间:2024/05/19 21:04
这次我用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 2121 *输出链栈信息的地方 感觉链栈的操作就类似于一个链表的头插法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 2169 *输出链栈信息的地方 感觉链栈的操作就类似于一个链表的头插法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
如有错误 敬请指正
- 链栈的初始化 入栈 出栈 打印栈中的元素等基础内容
- C++栈的初始化,入栈,出栈,获取栈顶元素等操作
- 数据结构栈的数组实现初始化,入栈,出栈,获取栈顶元素,栈的长度等操作
- 链栈:初始化、判断栈空、入栈、出栈、获取栈顶元素等
- 链栈的定义、初始化、出栈、入栈等操作
- 链栈的常用操作(初始化,入栈,出…
- 数据结构:stack栈的初始化、入栈、出栈及显示栈元素
- 链式堆栈的初始化、出栈、入栈、取栈顶元素、判空
- Java 用数组实现栈 (Stack),包括栈的初始化,入栈、出栈等操作
- 顺序栈的定义、初始化、出栈、入栈等操作 C++代码实现
- 链式栈初始化,入栈,出栈
- C语言实现顺序栈的基本操作(初始化、判断空、入栈、出栈、获取栈顶元素)
- 元素的出栈、入栈顺序的合法性。
- 栈--元素出栈、入栈顺序的合法性问题
- 元素出栈、入栈顺序的合法性
- 判断元素入栈/出栈的合法性
- 元素入栈、出栈的合法性检测
- 元素出栈、入栈顺序的合法性
- Android7.0须知--应用间共享文件(FileProvider)
- Linux 中的链表list 使用示例
- [unity] 5.5.2 Standard Specular shader 真机上代码调整半透明无效问题。
- 莫烦 tensorflow 笔记 (二) CNN
- IO流
- 链栈的初始化 入栈 出栈 打印栈中的元素等基础内容
- Opencv实现图像无缝拼接,Sift查找特征点,Flann进行匹配
- FreeMarker配置详解(新手必看)
- Java 类型信息 —— 获取泛型类型的类对象(.class)
- CentOS实用Shell命令简介
- Unity入门操作_旋转_006
- LOj #2002. 「SDOI2017」序列计数 (容斥+dp+矩阵快速幂)
- java集合类总结
- gcc 编译 so 导出函数问题