首页 > 其他分享 >《大话数据结构》栈-代码汇总

《大话数据结构》栈-代码汇总

时间:2022-11-17 20:38:10浏览次数:55  
标签:SElemType return int 栈顶 大话 汇总 数据结构 data top


//栈的结构定义
//元素下标同数组 从0开始
//***************************
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#define MAXSIZE 1000
#define MAX_SIZE 20
#define OK 1
#define ERROR 0
#define TRUE 1
#define FALSE 0
//***************************
typedef int Status;//Status是函数的类型,其值是函数结果的状态代码
typedef int SElemType;
typedef int Status;
typedef struct
{
SElemType data[MAXSIZE];
int top;//用于栈顶指针
}SqStack;
//进栈操作
Status Push(SqStack* S, SElemType e)
{
if (S->top == MAXSIZE - 1)//看栈是否满
//解释:MAXSIZE为栈里面可用存的最多数据个数例 100,顶栈的元素下标就是99
{
return ERROR;
}
S->top++;//顶栈的指针增加1
S->data[S->top] = e;//将新插入元素赋值给顶栈空间
return OK;
}
//出栈操作
//若栈不空,则删除S的顶栈元素,用e返回其值,并返回OK,否则返回ERROR
Status Pop(SqStack* S, SElemType* e)
{
if (S->top == -1)
{
return ERROR;
}
*e = S->data[S->top];//将要删除的顶栈元素赋值给e
S->top--;//顶栈指针减1
return OK;
}
//两栈共享空间结构
typedef struct
{
SElemType data[MAXSIZE];
int top1;//栈1栈顶指针
int top2;//栈2栈顶指针
}SqDoubleStack;
//判断是栈1还是栈2的元素
//进栈
Status Push(SqDoubleStack* S, SElemType e, int stackNumber)
{
if (S->top1 + 1 == S->top2)//栈已满 不能再进入新元素了
{
return ERROR;
}
if (stackNumber == 1)//栈1有元素进栈
{
S->data[++S->top1] = e;//如果栈1则先top1+1后给数组元素赋值
}
else if (stackNumber == 2)//栈2有元素进栈
{
S->data[--S->top2] == e;//若栈2则先top2-1后给数组元素赋值
}
return OK;
}
//出栈
Status Pop(SqDoubleStack* S, SElemType* e, int stackNumber)
{
if (stackNumber == 1)
{
if (S->top1 == -1)
{
return ERROR;//栈1空栈 溢出
}
*e = S->data[S->top1--];//将栈1的栈顶元素出栈
}
else if (stackNumber == 2)
{
if (S->top2 == MAXSIZE)
{
return ERROR;//栈2空栈 溢出
}
*e = S->data[S->top2++];//将栈2的栈顶元素弹出
}
return OK;
}
//栈链
typedef struct StackNode
{
SElemType data;
struct StackNode* next;
}StackNode, *LinkStackPtr;
typedef struct LinkStack
{
LinkStackPtr top;
int count;
}LinkStack;
//进栈
//插入元素e为新的栈顶元素
Status Push(LinkStack* S, SElemType e)
{
LinkStackPtr s = (LinkStackPtr)malloc(sizeof(StackNode));
s->data = e;
s->next = S->top;//把当前的栈顶元素赋值给新结点的直接后继
S->top = s;//将新的结点 s赋值给栈顶指针
S->count++;
return OK;
}
//出栈操作
Status Pop(LinkStack* S, SElemType* e)
{
LinkStackPtr p;
if (StackEmpty(*S))
{
return ERROR;
}
*e = S->top->data;
p = S->top;//将栈顶结点赋值给p
S->top = S->top->next;//是的栈顶指针下移一位,指向后一结点
free(p);
S->count--;
return OK;
}

总结

《大话数据结构》栈-代码汇总_赋值


标签:SElemType,return,int,栈顶,大话,汇总,数据结构,data,top
From: https://blog.51cto.com/u_15333750/5866131

相关文章

  • 《大话数据结构》队列代码汇总
    //队列#include<stdio.h>#include<stdlib.h>#include<time.h>#defineMAXSIZE1000#defineMAX_SIZE20#defineOK1#defineERROR0#defineTRUE1#defineFALSE0//******......
  • 数据结构-树-流程图
    根据《大话数据结构》......
  • [C#]数值逆序排序五种大法汇总
    汇总如下:usingSystem;usingSystem.Collections;usingSystem.Linq;namespaceSortDemo{publicclassMySort2:IComparer{publicintComp......
  • WindowsAPI-C#版_句柄回调常用通知类型汇总(HandleNotification)
    包含自定义的HandleNotification_MessageMsg、HandleNotification_MessageWParam类型,如下:/***┌──────────────────────────────────......
  • C# word 服务器发布问题汇总
    使用word组件操作word的确方便,但是发布使用时需要小心配置,不然错误还是很多的,这里汇总一下,帮助一下可能遇到这些问题的同学们常见问题1:RetrievingtheCOMclassfactory......
  • 数据结构基础—树与二叉树(1)
    数据结构基础—树和二叉树一、树、二叉树类型定义1.树的定义a.定义树是一种非线性结构,是具有相同特征的数据元素的集合(同质/类)数据对象D:D是具有相同特征的数据元......
  • 数据结构篇——栈和队列
    数据结构篇——栈和队列本次我们介绍基础算法中的栈和队列,我们会从下面几个角度来介绍:栈和队列简述模拟栈模拟队列栈和队列简述首先我们要简单了解一下栈和队列:......
  • 数组模拟各类数据结构
    数组模拟各类数据结构 Hash(散列)  并查集   Trie树 堆映射版本堆,Dijkstra需要用到 堆排序  链表  栈与队列......
  • C语言《数据结构与数据库/操作系统》实验测试数据集
    C语言《数据结构与数据库/操作系统》实验测试数据集实验二、栈的应用注意需要根据实验内容文件实现相应的数据结构——栈,以及菜单(程序要能循环使用,不要计算一次就必须重......
  • git 分支合并到master,将分支所有提交汇总为一次提交
    当有一个新的功能需要开发时,我们一般需要从master新建一个功能开发分支,如果这个功能需要的开发周期超过一天,我们一般都会留下多次commit提交。当功能开发并测试完毕,需要合......