数据结构--顺序栈和链式栈

http://www.cnblogs.com/jingliming/p/4602458.html

栈是一种限定只在表尾进行插入或删除操作,栈也是线性表表头称为栈的底部,表尾称为栈的顶部,表为空称为空栈,栈又称为后进先出的线性表,栈也有两种表示:顺序栈与链式栈顺序栈是利用一组地址连续的存储单元,依次存放从栈底到栈顶的数据元素,附设一个指针指示栈顶的元素在栈中的位置。

     

复制代码
 1 //顺序栈的实现
 2 #define INFINITY 65535
 3 #define MAXSIZE 1000
 4 #define ElemType int
 5 
 6 typedef struct {
 7     ElemType data[MAXSIZE]; //栈的大小
 8     int top;  //栈顶的游标
 9 }Stack;
10 
11 class ArraryStack{
12 public:
13     void initStack(Stack *s); //初始化栈
14     
15     bool isEmpty(Stack *s);  //判断栈是否为空
16     
17     ElemType Top(Stack *s);  //返回栈顶的元素
18     
19     ElemType Pop(Stack *s);  //返回并删除栈顶的元素
20     
21     void Push(Stack *s,ElemType e); //将元素e压栈
22     
23     void Print(Stack *s);  //输出从栈底到栈顶的元素
24     
25     void Clear(Stack *s);  //清空栈元素
26 
27 };
28 
29 void ArraryStack::initStack(Stack *s)
30 {
31     s->top=-1;
32 }
33 
34 bool ArraryStack::isEmpty(Stack *s)
35 {
36     if (s->top==-1)
37     {
38         return true;
39     }
40     return false;
41 }
42 
43 ElemType ArraryStack::Top(Stack *s)
44 {
45     if (!isEmpty(s))
46     {
47         return s->data[s->top];
48     }
49     return INFINITY;
50 }
51 
52 ElemType ArraryStack::Pop(Stack *s)
53 {
54     if (!isEmpty(s))
55     {
56         return s->data[s->top--];
57     }
58     return INFINITY;
59 }
60 
61 void ArraryStack::Push(Stack *s,ElemType e)
62 {
63     if(s->top>=MAXSIZE-1)
64         return;
65      ++s->top;
66      s->data[s->top]=e;
67      
68 }
69 
70 void ArraryStack::Print(Stack *s)
71 {
72     for (int i=0;i<=s->top;i++)
73     {
74         printf("%d ",s->data[i]);
75     }
76     printf("\n");
77 }
78 
79 void ArraryStack::Clear(Stack *s)
80 {
81     s->top=-1;
82 }
复制代码
回到顶部(go to top)

 第二部分:链式栈的实现

复制代码
  1 //链式栈的声明
  2 template<typename T>
  3 struct LinkNode{
  4 
  5     LinkNode* next;
  6     T data;
  7 };
  8 
  9 //链式栈的实现
 10 template<typename T>
 11 class LinkStack
 12 {
 13 public:
 14     LinkStack();
 15     ~LinkStack();
 16     void Push(T value);
 17     T Pop();
 18     T Top();
 19     int Size();
 20     bool isEmpty();
 21 
 22 private:
 23     LinkNode<T> *pHead;
 24 };
 25 
 26 template<typename T>
 27 LinkStack<T>::LinkStack()
 28 {
 29     
 30     pHead=new LinkNode<T>;
 31     if(pHead==NULL)
 32         cout<<"构建头结点空间失败。"<<endl;
 33     else
 34     {
 35         pHead->next=NULL;
 36         pHead->data=NULL;
 37     }
 38 }
 39 
 40 template<typename T>
 41 LinkStack<T>::~LinkStack()
 42 {
 43 
 44 }
 45 
 46 template<typename T>
 47 void LinkStack<T>::Push(T value)
 48 {
 49     LinkNode<T> *p=new LinkNode<T>;
 50     p->data=value;
 51     p->next=pHead->next;
 52     pHead->next=p;
 53 }
 54 
 55 template<typename T>
 56 T LinkStack<T>::Pop()
 57 {
 58     T value;
 59     LinkNode<T> *p=pHead->next;
 60     if (p!=NULL)
 61     {
 62         value= p->data;
 63         pHead->next=p->next;
 64         delete p;
 65         p=NULL;
 66         return value;
 67     }
 68     else
 69     {
 70 
 71         cout<<"没有结点"<<endl;
 72         return NULL;
 73     }
 74     
 75 }
 76 
 77 template<typename T>
 78 T LinkStack<T>::Top()
 79 {
 80     LinkNode<T> *p=pHead->next;
 81     if (p!=NULL)
 82     {
 83         T value=p->data;
 84         return value;
 85     }
 86     else
 87     {
 88 
 89         cout<<"头结点为空。"<<endl;
 90         return NULL;
 91     }
 92 }
 93 
 94 template<typename T>
 95 int LinkStack<T>::Size()
 96 {
 97     int count=0;
 98     LinkNode<T> *p=pHead->next;
 99     while(p!=NULL)
100     {
101 
102         ++count;
103         p=p->next;
104     }
105     return count;
106 }
107 
108 template<typename T>
109 bool LinkStack<T>::isEmpty()
110 {
111     LinkNode<T> *p=pHead->next;
112     if (p==NULL)
113     {
114         return true;
115     }
116     return false;
117 }
复制代码

测试用例:

复制代码
 1 int main()
 2 {
 3     LinkStack<int> sta;  
 4     sta.Push(1);  
 5     sta.Push(2);  
 6     sta.Push(3);  
 7     cout << "The size of the stack now is " << sta.Size() << endl;  
 8     sta.Pop();  
 9     cout << "The top element is " << sta.Top() << endl;  
10     cout << "The size of the stack now is" << sta.Size() << endl;  
11     if (sta.isEmpty())  
12     {  
13         cout << "This stack is empty." << endl;  
14     }  
15     else  
16     {  
17         cout << "This stack is not empty." << endl;  
18     }  
19     system("pause");
20     return 0;
21 }
复制代码

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/384181.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

CodeForces - 1144F搜索+简单图论

【题目链接】Graph Without Long Directed Paths 【题目分析】题目想要讲一个无向图变成一个最长路径不超过1的有向图。假如某个边是从u到v的&#xff0c;那么所有和v相连的都必须是指向v的&#xff0c;所有和u相连的都必须是从u开始的。相当于涂色&#xff0c;相连的节点应该涂…

数据结构--双链表的创建和操作

http://www.cnblogs.com/jingliming/p/4602144.html#0-tsina-1-42616-397232819ff9a47a7b7e80a40613cfe1 一、双向链表的定义 双向链表也叫双链表&#xff0c;是链表的一种&#xff0c;它的每个数据结点中都有两个指针&#xff0c;分别指向直接后继和直接前驱。所以&#xff0c…

CodeForces - 1152B二进制+思维

【题目链接】Neko Performs Cat Furrier Transform 【题目分析】要求将一个数字变成2n-1,通过尝试我们发现如果将最低位的全零位和对应的全一数字&#xff08;例如11000对应的就是111&#xff09;异或那么数字就会变成想要的结果&#xff08;11111&#xff09; 但是如果前面还有…

C语言文件操作之fgets()

http://blog.csdn.net/daiyutage/article/details/8540932 来说一说fgets(..)函数。 原型 char * fgets(char * s, int n,FILE *stream); 参数&#xff1a; s: 字符型指针&#xff0c;指向存储读入数据的缓冲区的地址。 n: 从流中读入n-1个字符 stream &#xff1a; 指向读取…

指针与零的比较以及浮点型与零的比较

指针和零的比较 int *p null;if(p ! null){p 20; } 整形和零的比较 int i 0; if(0i) {... } 浮点型和零的比较 判断一个浮点数是不是零 #define EXP 0.0000000000001 float f 0.00001; if((f > -EXP)&&(f < EXP)) {... } 扩展后 判断一个浮点数是不…

CodeForces 1138B暴力+剪枝

【题目链接】Circus 【题目分析】理解题意以后发现并没有什么思路&#xff0c;没有什么算法能用&#xff0c;这个时候就应该想到计算机解题的本质——暴力求解。相应的就要想到剪枝的条件&#xff0c;肯定不能盲目的暴力求解。 总共有四种人&#xff1a;00,01,10,11&#xff0c…

MYSQL错误代码#1045 Access denied for user 'root'@'localhost'

http://blog.csdn.net/lykezhan/article/details/70880845 遇到MYSQL“错误代码#1045 Access denied for user rootlocalhost (using password:YES)” 需要重置root账号权限密码&#xff0c;这个一般还真不好解决。 不过&#xff0c;这几天调试的时候真的遇到了这种问题&#x…

C语言操作符

移位表达式 左移操作符<< 左边抛弃,右边补零 右移操作符>> 1.逻辑右移 左边补零,右边丢弃 2.算数右移 左边补符号位,右边丢弃 注意: 1.左移一位相当于乘2,右移一位相当于除2,并且在内存中存放的是二进制的补码,且移位操作符只对int型数操作 2.移位操作符不要移动…

棋盘问题——DFS

【题目描述】 在一个给定形状的棋盘&#xff08;形状可能是不规则的&#xff09;上面摆放棋子&#xff0c;棋子没有区别。要求摆放时任意的两个棋子不能放在棋盘中的同一行或者同一列&#xff0c;请编程求解对于给定形状和大小的棋盘&#xff0c;摆放k个棋子的所有可行的摆放方…

linux安装mysql和使用c语言操作数据库的方法 c语言连接mysql

http://www.jb51.net/article/46139.htm 1. MySQL的安装与配置&#xff1a; 在Ubuntu下安装MySQL方法很简单&#xff0c;使用如下命令&#xff1a; 复制代码 代码如下:sudo apt-get install mysql-server安装的过程中系统会提示设置root密码&#xff0c;此过程可以跳过&#…

常量变量以及循环

常量 1.三目运算词 三字母词表达字符???([??)]??<{??>} 2.循环 1).数组元素以及变量在内存中的分配顺序 2)goto语句应用 //电脑关机程序 #include<stdio.h> #include <stdlib.h> #include <string.h> #include <windows.h> int ma…

Dungeon Master——BFS

【题目描述】 You are trapped in a 3D dungeon and need to find the quickest way out! The dungeon is composed of unit cubes which may or may not be filled with rock. It takes one minute to move one unit north, south, east, west, up or down. You cannot move …

Linux 环境 C语言 操作MySql 的接口范例

http://www.cnblogs.com/wunaozai/p/3876134.html 接上一小节&#xff0c;本来是计划这一节用来讲数据库的增删改查&#xff0c;但是在实现的过程中&#xff0c;出现了一点小问题&#xff0c;也不是技术的问题&#xff0c;就是在字符界面上比较不好操作。比如要注册一个帐号&a…

二进制逻辑运算符有关练习题

//1.写一个函数返回参数二进制中 1 的个数 #include<stdio.h> int div 0; //除数 int rem 0; //余数 int count 0; //计1 int count_one_bits(unsigned int div) {int con 0; //商while (div > 1){con div / 2;rem div % 2;div con;if (1 rem){count;}}…

Catch That Cow——BFS

【题目描述】 Farmer John has been informed of the location of a fugitive cow and wants to catch her immediately. He starts at a point N (0 ≤ N ≤ 100,000) on a number line and the cow is at a point K (0 ≤ K ≤ 100,000) on the same number line. Farmer Jo…

利用mysql提供的c语言接口操作数据库

http://blog.csdn.net/bladeandmaster88/article/details/52980872 //1.工程要在c/c->常规->附加包含目录添加mysql.h的路径D:\mysql5.5\include //2.工程要在链接器->常规->附加库目录添加libmysql.lib的路径D:\mysql5.5\lib #include <WinSock2.h>/…

数组相关运算

数组的初始化 数组及指针在内存中的存储 一维数组在内存中的存储 有关数组的运算 //一维数组 int a[] {1,2,3,4}; printf("%d\n",sizeof(a));//16这里的a表示的是整个数组,计算出的是整个数组的大小,单位为byte printf("%d\n",sizeof(a 0));/*a没有单独…

Find The Multiple——简单搜索+大胆尝试

【题目描述】 Given a positive integer n, write a program to find out a nonzero multiple m of n whose decimal representation contains only the digits 0 and 1. You may assume that n is not greater than 200 and there is a corresponding m containing no more t…

C语言操作MYSQL小例子

http://blog.csdn.net/small_qch/article/details/8180678 初学使用用C语言操作MYSQL&#xff0c;写了个小例子&#xff0c;帖上来献丢人一下&#xff0c;呵呵。 程序很简单&#xff0c;先连接数据库&#xff0c;然后向class1表中插入一条数据&#xff0c;最后获取并输出整个cl…

Find a way——BFS

【题目描述】 Pass a year learning in Hangzhou, yifenfei arrival hometown Ningbo at finally. Leave Ningbo one year, yifenfei have many people to meet. Especially a good friend Merceki. Yifenfei’s home is at the countryside, but Merceki’s home is in the ce…