C++链栈基本操作

 1 #include <iostream>
 2 using namespace std;
 3
 4 struct Node
 5 {
 6     int data;
 7     Node *next;
 8 };
 9
10 /*初始化链栈*/
11 void InitChainStack(Node *top)
12 {
13     top->next=0;
14 }
15
16 /*往栈里压进数据elem*/
17 int Push(Node *top, int elem)
18 {
19     Node *p=(Node*)malloc(sizeof(Node));
20     if(p==0)
21         return false;
22     p->data=elem;
23     p->next = top->next;
24     top->next=p;
25     return true;
26 }
27
28 /*出栈,并用x返回出栈值*/
29 int Pop(Node *top, int &x)
30 {
31     Node *temp = top->next;
32     if(temp==0)
33         return false;
34     top->next = temp->next;
35     x=temp->data;
36     free(temp);
37     return true;
38 }
39
40 /*返回栈顶数据*/
41 int GetTop(Node * top, int &x)
42 {
43     if(top->next==0)
44         return false;
45     x=top->next->data;
46     return true;
47 }
48
49 /*判断栈是否为空*/
50 int IsEmpty(Node * top)
51 {
52     if(top->next==0)
53         return true;
54     return false;
55 }
56
57 /*打印栈所有数据元素*/
58 void PrintStack(Node *top)
59 {
60     Node *temp = top->next;
61     while(temp!=0)
62     {
63         cout << temp->data << " ";
64         temp=temp->next;
65     }
66     cout << endl;
67 }
68
69 void main()
70 {
71     Node *node=new Node;
72     InitChainStack(node);
73
74     for(int i=0;i<10;i++)
75         Push(node,i);
76     int x=0;
77     Pop(node,x);
78     GetTop(node,x);
79     cout << x << endl;
80     cout << IsEmpty(node) << endl;
81     PrintStack(node);
82 }
时间: 2024-11-09 02:03:19

C++链栈基本操作的相关文章

链栈基本操作

栈基本概念: 栈(stack)是限定在表尾进行插入和删除操作的线性表(或单链表). //只能在一段进行插入和删除,因此不存在,在中间进行插入 栈顶(top):允许插入和删除的一端.而另一端称为栈底(bottom) 空栈:不含任何数据元素的栈. 后进先出 两个基本操作: 栈的插入操作(push),叫做进栈,或压栈,或入栈 删除操作(pop),叫做出栈,或弹栈 注意链栈next指针的指向,与队列不同: 如果插入一个元素,它的next指针是指向前一个已经在栈中的元素的 而队列则是,插入一个元素,其ne

小猪的数据结构辅助教程——3.2 栈与队列中的链栈

小猪的数据结构辅助教程--3.2 栈与队列中的链栈 标签(空格分隔): 数据结构 1.本节引言: 嗯,本节没有学习路线图哈,因为栈我们一般都用的是顺序栈,链栈还是顺带提一提吧, 栈因为只是栈顶来做插入和删除操作,所以较好的方法是将栈顶放在单链表的头部,栈顶 指针与单链表的头指针合二为一~所以本节只是讲下链栈的存储结构和基本操作! 2.链栈的存储结构与示意图 存储结构: typedef struct StackNode { SElemType data; //存放的数据 struct StackN

C++实现链栈的基本操作

之前对顺序栈写了基本操作,觉得有必要也动手练练栈的链表实现. 对于链栈,一般不会出现栈满的情况. 链栈头文件定义如下: #ifndef CSTOCK_H_ #define CSTOCK_H_ typedef int elemType; struct Item { elemType data; Item * p_next; }; class CStock { public: CStock(); CStock(const CStock & otherStock); //拷贝构造函数: CStock

链栈的基本操作

链栈的基本操作实现代码如下: #include<iostream> using namespace std; #define TRUE 1 #define FALSE 0 //链栈的结构 typedef struct node { int data; struct node *next; }LinkStackNode; typedef LinkStackNode *LinkStack; //链栈进栈 int Push(LinkStack top, int x)//将数据元素x压入栈top中 {

数据结构(C实现)------- 链栈

描述:      链栈,即栈的链式存储结构,链栈通常使用不带头结点的单链表来表示,因此其结点的结构和单链表的结点结构相同. 在一个链栈中,栈底就是链表的最后一个结点,而栈顶总是链表的第一个结点.因此,新入栈的元素即为链表中采用头插法新加入的结点,一个链栈可以由栈顶指针唯一确定,当top为NULL时,则表示该栈是一个空的链栈.  实现:   链栈结点的类型描述: typedef int ElemType; typedef struct node{ ElemType data; struct nod

链栈的基本接口实现

#include <conio.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #define TRUE 1 #define FALSE 0 #define OK 1 #define ERROR 0 #define IBFEASIBLE -1 #define OVERFLOW -2 typedef int Status; typedef int ElemType; /* 元素类型为i

链栈的实现问题

问题描述:用链式存储实现栈的基本操作 涉及变量:top:自定义Node类,指向栈顶元素的结点 涉及教材:<数据结构--Java语言描述(第2版)> 清华大学出版社 大致思路: 链式存储结构一般是通过链接结点类来形成链 出栈是由栈顶元素向栈底元素方法依次输出 则top的位置需指向栈顶元素 判空的根据是top结点是否为空,即栈顶元素是否存在 置空只需要将top指针指向null,则可以重新开始入栈操作 求长度需要遍历了全部结点后才能计算准确长度 陈列元素也需要遍历各元素,与求长度的算法有点类似,只是

链栈的实现

链栈即链式栈,也就是说我们不用再考虑空间的大小,可随心所欲的进行数据的插入/删除了.和顺序栈一样,仍然要保持其stack的特性,只在一端进行插入和删除,后进先出. 示例代码: #ifndef _LINKSTACK_H #define _LINKSTACK_H typedef int ElemType; typedef int Status; typedef struct linkStack { ElemType data; struct linkStack * top; }linkStack;

堆栈(链栈)

#include<cstdlib> #include<iostream> #include<fstream> using namespace std; #define OK 1 #define ERROR 0 #define OVERFLOW -2 typedef int Status; typedef char SElemType; typedef struct StackNode{ SElemType data; struct StackNode *next; }S