数据结构——链栈及其操作

 1 #include<iostream>
 2 using namespace std;
 3
 4 typedef int Status;
 5 typedef int ElemType;
 6 #define OK 1
 7 #define ERROR 0
 8
 9
10 //链栈的存储结构
11 typedef struct StackNode
12 {
13     ElemType data;                //数据域
14     struct StackNode *next;        //指针域
15 }StackNode,*LinkStack;
16
17
18 //初始化,构造一个空栈
19 Status InitStack(LinkStack &S)
20 {
21     S = NULL;
22     return OK;
23 }
24
25
26 //入栈
27 //在栈顶插入元素e
28 Status Push(LinkStack &S, ElemType e)
29 {
30     LinkStack p;            //生成新结点
31     p = new StackNode;
32     p->data = e;
33     p->next = S;            //将新结点插入栈顶
34     S = p;                    //修改栈顶指针为p
35     return OK;
36 }
37
38
39 //出栈
40 //删除S的栈顶元素,用e返回其值
41 Status Pop(LinkStack &S, ElemType &e)
42 {
43     LinkStack p;
44
45     if (S == NULL)        //栈空
46         return ERROR;
47
48     e = S->data;    //将栈顶元素赋值给e
49     p = S;            //用p临时保存栈顶元素空间,以备释放
50     S = S->next;    //修改栈顶指针
51     delete p;        //释放原栈顶元素的空间
52     return OK;
53 }
54
55
56 //取栈顶元素
57 ElemType GetTop(LinkStack S)
58 {
59     if (S != NULL)    //栈非空
60         return S->data;        //返回栈顶元素的值,栈顶指针不变
61     else
62         return ERROR;
63 }
64
65
66 int main()
67 {
68     int n, x;
69     LinkStack S;
70
71     InitStack(S);
72
73     cout << "请输入链栈的元素个数:" << endl;
74     cin >> n;
75
76     cout << "请依次输入" << n << "个元素:" << endl;
77
78     while (n--)
79     {
80         cin >> x;
81         Push(S, x);
82     }
83
84     cout << "元素依次出栈:" << endl;
85     while (S != NULL)
86     {
87         cout << GetTop(S) << " ";
88         Pop(S, x);
89     }
90
91     system("pause");
92     return 0;
93 }

原文地址:https://www.cnblogs.com/friend-A/p/9073097.html

时间: 2024-10-11 08:43:48

数据结构——链栈及其操作的相关文章

数据结构 - 链栈的实行(C语言)

数据结构-链栈的实现 1 链栈的定义 现在来看看栈的链式存储结构,简称为链栈. 想想看栈只是栈顶来做插入和删除操作,栈顶放在链表的头部还是尾部呢?由于单链表有头指针,而栈顶指针也是必须的,那干吗不让它俩合二为一呢,所以比较好的办法是把栈顶放在单链表的头部(如下图所示).另外,都已经有了栈顶在头部了,单链表中比较常用的头结点也就失去了意义,通常对于链栈来说,是不需要头结点的. 对于空栈来说,链表原定义是头指针指向空,那么链栈的空其实就是 top=NULL 的时候. 链栈的结构代码如下: /* 链栈

C语言数据结构链栈(创建、入栈、出栈、取栈顶元素、遍历链栈中的元素)

/**创建链栈*创建一个top指针代表head指针*采用链式存储结构*采用头插法创建链表*操作 创建 出栈 入栈 取栈顶元素*创建数据域的结构体*创建数据域的名称指针*使用随机函数对数据域的编号进行赋值*/ #include<stdio.h>#include<stdlib.h>#include<string.h>#include<time.h>#define OK 1#define ERROR 0#define NAMESIZE 255//字符串的最大长度

链栈简单操作

/*设置一个静态变量记链表值的个数入栈是头插法 */#include<stdio.h>#include<stdlib.h>#include<malloc.h>static int count=0;typedef struct node{ int data; struct node *next;}stacknode,*linkstack;/*typedef struct stack{ struct stack pop; struct stack bottom;}stack

数据结构 --- 链栈(栈的链式存储结构)

工程目录结构: common.h: 1 //#ifndef __common_h__ 2 //#define __common_h__ 3 4 #define OK 1 5 #define ERROR 0 6 #define TRUE 1 7 #define FALSE 0 8 9 #define MAXSIZE 20 10 11 typedef int Status; //函数的返回结果,OK.ERREO.TRUE.FALSE 12 typedef int ElemType; //结点数据域的

数据结构——顺序栈及其操作

1 #include<iostream> 2 using namespace std; 3 4 typedef int SElemType; 5 typedef int Status; 6 #define OK 1 7 #define ERROR 0 8 9 10 #define MAXSIZE 100 //栈的最大空间 11 12 13 //顺序栈的存储结构 14 typedef struct SqStack 15 { 16 SElemType *base; //栈底指针 17 SElemT

数据结构(栈的操作)C语言实现

# include<stdio.h> # include<malloc.h> # include<stdlib.h> typedef struct Node { int data; struct Node *pNext; }NODE,* PNODE; typedef struct Stack { PNODE pTop; PNODE pBottm; }STACK,* PSTACK; void initStack(PSTACK pS); void pushStack(PST

数据结构:链栈

栈的定义: 当单链表限定只能在头部进行插入和删除操作的时候,就是链栈.同时把栈顶放在单链表的头部,使单链表的头指针和栈顶指针top合二为一,所以对于链栈,就不再需要头结点了.这时对链栈的push也就相当于单链表的头插法. 同时对链栈来说,基本不存在栈满的情况,除非内存已经没有可以使用的空间了,对于空栈来说,链表原定义是头指针指向空,那么链栈的空其实就是top==NULL的时候. 链栈的代码实现: #include <iostream> #include <stdlib.h> usi

数据结构之栈和队列

数据结构学习继续向前推进,之前对线性表进行了学习,现在我们进入栈和队列的学习.同样我们先学习一些基本概念以及堆栈的ADT. 栈和队列是两种中重要的线性结构.从数据结构角度看,栈和队列也是线性表,只不过是受限的线性表.因此可以称为限定性数据结构.但从数据类型来看,他们是和线性表大不相同的两类重要的抽象数据类型. 栈:(stack)是限定仅在表尾进行相应插入和删除操作的线性表.因此,对栈来说,表尾有其特殊含义,称为栈顶,表头称为栈底,不含元素的空表称为空栈.栈一个重要特性就是后进先出.OK,我们来看

数据结构复习--栈和队列(1)--栈

1.栈和队列简介: 栈和队列是非常重要的两种数据结构,在软件设计中应用很多.栈和队列也是线性结构,线性表,栈和队列这三种数据元素和数据元素间的逻辑完全相同.差别是线性表的操作不受限制,而栈和队列的操作收到限制,栈的操作只能在表的一端进行,队列的插入操作在表的一端进行而其它操作在表的另一端进行,所以把栈和队列称为操作受限的线性表 栈: 栈(Stack)是操作限定在表的尾端进行的线性表.表尾由于要进行插入,删除等操作,所以,它具有特殊含义,把表尾成为栈顶(Top),另一端是固定的,叫栈底(Botto