【数据结构第二周】堆栈知识点整理

摘要:
存储#defineMaxSize<存储数据元素的最大数量>typedefstruct{ElementTypeData[MaxSize]intTop;}堆栈堆栈voidPush{if{printf;return;}否则{PtrS-˃Data[++]=item;return;}}Outstack ElementTypePop{if{printf;returnERROR;}否则{return;}}2.堆栈的链式存储堆栈的链式存储器结构实际上是一个单链表,称为链式堆栈。插入和删除操作只能在堆栈顶部执行。顶端应指向链接列表的头节点。初始化typedefstructNode{ElementTypeData;structNode*Next;}LinkStack;LinkStack*顶部;LinkStack*CreateStack(){/*构建堆栈的头节点并返回指针*/LinkStack*S;S=malloc;S-˃Next=NULL;returnS;}IntIsEmpty{/*判断堆栈S是否为空。如果为空,则函数返回整数1。否则,返回0*/return;}Stack VoidPush{/*将元素项推入堆栈S*/structNode*TmpCell;TmpCell=malloc;TmpCell-˃element=项;TmpCell-˃Next=S-˃Next;S-˃Next=TmpCell;}Outstack ElementTypePop{/*删除并返回堆栈S*/structNode*FirstCell;ElementTypeTopElem的顶部元素;如果{printf;returnNULL;}否则{FirstCell=S-˃Next;S-˃Next=FirstCell-˃Next;TopElem=FirstCell-˃Element;free;returnTopElem;}}

堆栈(Stack):具有一定操作约束的线性表

只在一端(栈顶,Top)做插入和删除

1、栈的顺序存储实现

栈的顺序存储结构通常由一个一维数组和一个记录栈顶元素位置的变量组成。

(1)存储

#define MaxSize <储存数据元素的最大个数>
typedef struct 
{
	ElementType Data[MaxSize]
	int Top;
}Stack;

(2)入栈

void Push(Stack *PtrS, ElementType item)
{
	if (PtrS->Top == MaxSize-1)
	{
		printf("堆栈满");
		return;
	}else
	{
		PtrS->Data[++(PtrS->Top)] = item;
		return;
	}
}

(3)出栈

ElementType Pop(Stack *PtrS)
{
	if (PtrS->Top == -1)
	{
		printf("堆栈空");
		return ERROR;
	}else
	{
		return (PtrS->Data[(PtrS->Top)--]);
	}
}

2、堆栈的链式存储实现

栈的链式存储结构实际上就是一个单链表,叫做链栈。

插入和删除操作只能在栈链的栈顶进行

栈顶指针Top应该指向链表的头结点

(1)初始化

typedef struct Node
{ 
	ElementType Data;
    struct Node *Next; 
} LinkStack;
LinkStack *Top;
LinkStack *CreateStack()
{ /* 构建一个堆栈的头结点,返回指针 */
   LinkStack *S;
   S = malloc( sizeof(struct Node ));
   S->Next = NULL;
   return S;
}
int IsEmpty( LinkStack *S )
{ /*判断堆栈S是否为空,若为空函数返回整数 1,否则返回0 */
   return ( S->Next == NULL );
}

(2)入栈

void Push( ElementType item, LinkStack *S ) 
{ /* 将元素item压入堆栈S */
    struct Node *TmpCell;
    TmpCell = malloc( sizeof( struct Node ) ); 
    TmpCell->Element = item;
    TmpCell->Next = S->Next;
    S->Next = TmpCell;
}

(3)出栈

ElementType Pop( LinkStack *S ) 
{ /* 删除并返回堆栈S的栈顶元素 */
   struct Node *FirstCell;
   ElementType TopElem;
   if( IsEmpty( S ) ) 
   {
        printf(“堆栈空”); 
        return NULL; 
   }else 
   {
        FirstCell = S->Next;
        S->Next = FirstCell->Next; 
        TopElem = FirstCell ->Element; 
        free(FirstCell);
        return TopElem;
    } 
} 

免责声明:文章转载自《【数据结构第二周】堆栈知识点整理》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇MayaLearn0006: 多边形曲线曲面建模 高脚杯曲面建模 变形工具redis ---有用下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

Powerdesigner逆向工程从sql server数据库生成pdm (转载)

第一步:打开"控制面板"中的"管理工具" 第二步:点击"管理工具"然后双击"数据源(odbc)"   第三步:打开之后,点击"添加" 第四步:选择"sqlserver" 点击"完成" 第五步:跟据自身的情况填写 说明: 名称和描述可以自己命名,服务器就是你的数据库地址(下图) 第六步:填写好登录名和密码 第七步:完成所有配置后,打开PowerD...

解决:Access模糊匹配查询查不到数据

今天遇到一个可笑的问题,直接操作Access的SQL语句: Select * from table where txtTitle like '%数据%' 匹配竟然无效。后来才发现在Access中模糊匹配应该用*代替% Select * from table where txtTitle like '*数据*' 狂晕。。。...

SqlServer数据复制出现的问题与处理

车间级SqlServer与厂级SqlServer因故障,其中某一台服务器故障重新启动后,需要确保数据库复制功能的正常。 车间级SqlServer服务器故障服务器启动后,需要做如下检查: 1、实时访问数据库的程序是否运行正常(数据采集、膨丝采集程序) 2、车间级SqlServer数据库复制是否正常:Log Reader是否运行;Queue Reader是否运...

alluxio2.0特性-预览

项目地址 https://github.com/Alluxio/alluxio/tree/branch-2.0-preview 2.0版本-构思和设计 支持超大规模数据工作负载 Alluxio作为计算和存储之间的数据编排层,使数据移动并且可以跨多个不同的存储系统访问:HDFS,对象存储,网络附加存储,随着时间的推移,Alluxio需要的元数据支持规模 提供...

PTA录入数据库题目流程

作为一名数据库萌新,为这个过程我奋斗了3天了,这是第四天。这一天我终于可以写这个流程了。 废话少说,进入正题。 第一步: 安装sql server服务器(因我这数据库文档是mdf和ldf文档,故需要先进行数据迁移)。安装sql server服务器流程:待会附上链接; 安装mysql5.7及其mysql workbench工具。安装教程:https://ww...

R语言-文本挖掘

---恢复内容开始--- 案例1:对主席的新年致辞进行分词,绘制出词云 掌握jieba分词的用法 1.加载包 library(devtools) library(tm) library(jiebaR) library(jiebaRD) library(tmcn) library(NLP)library(wordcloud2) 2.导入数据 new...