链栈
2016-05-01 11:16
288 查看
链栈 #include<iostream> using namespace std; typedef int elemtype; typedef struct node { elemtype data; node *next; }linkstack; //初始化 linkstack *intial() { linkstack *s; s=(linkstack *)malloc(sizeof(linkstack)); s->next=NULL; return s; } //取栈顶元素 elemtype gettop(linkstack *s) { if(s->next==NULL) return 0; else return s->next->data; } //求栈的长度 int getlen(linkstack *s) { linkstack *p; int cnt=0; p=s->next; while(p) { cnt++; p=p->next; } return cnt; } //入栈 void push(linkstack *s,elemtype x) { linkstack *p; p=(linkstack *)malloc(sizeof(linkstack)); if(!p) return ; p->data=x; p->next=s->next; s->next=p; } //出栈 void pop(linkstack *s) { if(!s->next) return ; linkstack *p; p=s->next; s->next=p->next; free(p); } //判断栈是否为空 int is_empty(linkstack *s) { if(!s->next) return 1; return 0; } //输出栈 void list(linkstack *s) { linkstack *p; p=s->next; while(p) { cout<<p->data<<" ";p=p->next; } cout<<endl; } //链栈逆置方法1 void turnlink1(linkstack *s) { linkstack *p,*q; p=s->next; s->next=NULL; q=p; while(p) { q=p->next; p->next=s->next; s->next=p; p=q; } } //链栈逆置方法2 void turulink2(linkstack *s1,linkstack *s2) { elemtype x; while(s1->next) { x=gettop(s1); pop(s1); push(s2,x); } } //比较一个字符串是否对称 int issame(string a) { linkstack *s; s=intial(); int same=1; int m=(int)a.length(); int n=m/2; for(int i=0;i<n;i++) push(s,a[i]); if(m%2==1) n=n+1; for(int i=n;i<m;i++) { if(gettop(s)==a[i]) {pop(s);} else same=0; if(!same) break; } return same; } int main() { //主程序实现的是判断一个字符串是否对称 string a; cin>>a; int same=issame(a); if(same) cout<<"Yes"<<endl; else cout<<"No"<<endl; return 0; }
相关文章推荐
- MySql: AUTO_INCREMENT
- 20145233韩昊辰 第四次实验报告
- sql server中的 SET NOCOUNT ON 的含义
- JAVA设计模式之单例模式
- 非二叉树转二叉树的表示法
- java之StringBuffer的一些用法
- Problem O
- HDU 5756 ztr loves lucky numbers dfs
- Android学习系列一用按钮实现显示时间
- android多进程实验
- leetcode-107. Binary Tree Level Order Traversal II
- 计算机基础-Socket详解
- 如何上传应用到 Google Play
- 剑指offer(62):之字形打印二叉树
- Swift3.0为视图添加旋转动画_CABasicAnimation
- 类的内存空间大小
- POJ3278解题报告
- 布尔代数
- 链表结点的删除
- MySql的使用简介