C语言数据结构-链式栈的实现-初始化、销毁、长度、取栈顶元素、查找、入栈、出栈、显示操作
1、数据结构-链式栈的实现-C语言
//链式栈的链式结构
typedef struct StackNode
{
int data;
struct StackNode *next;
} StackNode,*LinkStack;
//链式栈初始化---1
void InitStack(LinkStack* S);
//链式栈的销毁---2
void DestroyStack(LinkStack* S);
//链式栈的清空---3
void ClearStack(LinkStack* S);
//判断链式栈是否为空---4
void StackEmpty(LinkStack S);
//链式栈的长度---5
int StackLength(LinkStack S);
//取链式栈顶元素---6
void GetTop(LinkStack S);
//入链式栈操作---7
void Push(LinkStack* S, int value);
//出链式栈操作---8
void Pop(LinkStack* S,int* value);
//依次访问链式栈元素---9
void StackTraverse(LinkStack S);
void ShowHelp();
//----------------------------------------------------
void ShowHelp()
{
printf("1---初始化链式栈\n");
printf("2---销毁链式栈\n");
printf("3---清空链式栈\n");
printf("4---判断链式栈是否为空\n");
printf("5---链式栈的长度\n");
printf("6---取链式栈顶元素\n");
printf("7---入链式栈操作\n");
printf("8---出链式栈操作\n");
printf("9---依次访问链式栈元素\n");
}
void InitStack(LinkStack* S)
{
//栈顶指针指向空,刚开始只有一个指针,不和单链表一样有头结点。不需要分配空间。
*S = NULL;
}
void DestroyStack(LinkStack* S)
{
LinkStack q;
while(*S){
q = *S;
*S = (*S)->next;
free(q);
}
}
void ClearStack(LinkStack* S)
{
LinkStack q;
while(*S){
q = *S;
*S = (*S)->next;
free(q);
}
*S = NULL;
//和销毁差别在于,销毁后,最后又初始化了一下
}
void StackEmpty(LinkStack S)
{
if(S == NULL)
printf("此栈为空栈。\n");
else
printf("此栈不为空栈。\n");
}
int StackLength(LinkStack S)
{
int num = 0;
LinkStack q = S;
while(q){
num++;
q = q->next;
}
return num;
}
void GetTop(LinkStack S)
{
if(!S)
{
printf("此栈为空。\n");
return;
}
int num;
num = S->data;
printf("此栈顶元素为%d。\n",num);
}
void Push(LinkStack* S, int value)
{
LinkStack p = (StackNode*) malloc(sizeof(StackNode));
if(!p){
printf("分配失败\n");
return ;
}
p->data = value;
p->next = *S;
*S = p;
printf("入栈成功\n");
}
void Pop(LinkStack* S,int* value)
{
if(*S == NULL)
{
printf("栈中无元素,不能再进行出栈操作.\n");
return;
}
*value = (*S)->data;
LinkStack p = *S;
*S = (*S)->next;
free(p);
printf("出栈成功\n");
}
void StackTraverse(LinkStack S)
{
if(S == NULL){
printf("此栈为空。\n");
return;
}
LinkStack p = S;
printf("从栈顶到栈底值依次为:\n");
while(p != NULL)
{
printf("%d ",p->data);
p = p->next;
}
printf("\n");
}
C语言数据结构-链式栈的实现-初始化、销毁、长度、取栈顶元素、查找、入栈、出栈、显示操作的更多相关文章
- C语言数据结构-链式队列的实现-初始化、销毁、清空、长度、队列头元素、插入、删除、显示操作
1.数据结构-链式队列的实现-C语言 typedef struct QNode { int data; struct QNode *next; }QNode,*QueuePtr; typedef st ...
- C语言数据结构-循环队列的实现-初始化、销毁、清空、长度、队列头元素、插入、删除、显示操作
1.数据结构-循环队列的实现-C语言 #define MAXSIZE 100 //循环队列的存储结构 typedef struct { int* base; //基地址 int _front; //头 ...
- C语言数据结构-队列的实现-初始化、销毁、清空、长度、队列头元素、插入、删除、显示操作
1.数据结构-队列的实现-C语言 //队列的存储结构 #define MAXSIZE 100 typedef struct { int* base; //基地址 int _front; //头指针 i ...
- C语言数据结构-栈的实现-初始化、销毁、长度、取栈顶元素、查找、入栈、出栈、显示操作
1.数据结构-栈的实现-C语言 #define MAXSIZE 100 //栈的存储结构 typedef struct { int* base; //栈底指针 int* top; //栈顶指针 int ...
- C语言实现链栈的初始化&进栈&出栈&读取栈顶元素
/*链表实现栈的一系列操作*/ #include<stdio.h> #include<stdlib.h> #define OK 1 #define ERROR 0 typede ...
- C语言实现顺序栈的初始化&进栈&出栈&读取栈顶元素
/*顺序表实现栈的一系列操作*/ #include<stdio.h> #include<stdlib.h> #define Stack_Size 50 //设栈中元素个数为50 ...
- C语言数据结构链栈(创建、入栈、出栈、取栈顶元素、遍历链栈中的元素)
/**创建链栈*创建一个top指针代表head指针*采用链式存储结构*采用头插法创建链表*操作 创建 出栈 入栈 取栈顶元素*创建数据域的结构体*创建数据域的名称指针*使用随机函数对数据域的编号进行赋 ...
- 【转】【数据结构】【有n个元素依次进栈,则出栈序列有多少种】
卡特兰数 大神解释:https://blog.csdn.net/akenseren/article/details/82149145 权侵删 原题 有一个容量足够大的栈,n个元素以一定的顺序 ...
- C语言数据结构——第三章 栈和队列
三.栈和队列 栈和队列是两种重要的线性结构.从数据结构的角度来看,栈和队列也是线性表,它的特殊性在于栈和队列的基本操作是线性表操作的子集,它们的操作相对于线性表来说是受到限制的,因此,可以称其为限定性 ...
随机推荐
- Solaris10如何确认DirectIO是否已经启用
对于Oracle而言,如果数据库存储在UFS文件系统上,启用DirectIO能够提高数据库性能.Oracle有个参数filesystemio_options可以控制数据库是否使用DirectIO. ...
- 利用XmlDocument操作XML文件
利用XmlDocument可以方便的操作XML文件. .操作XML文件基本方法 ()添加对System.Xml的引用,并使用using语句添加引用: ()假设要读取的XML文件如下: <?xml ...
- oracle 基础 执行sql文件
Oracle执行外部文件: c:>sqlplus user/pwd@db sql>@new.sql 执行多个sql文件: 1.把所有的文件都放在同一个目录下,然后在命令行里执行命令: ...
- java之类和对象
类的成员: 成员变量和成员函数. 成员函数:构造函数和普通函数. 构造函数: 作用:自动对对象进行初始化 特点:1.方法名和类名一致 2.没有返回值 问: 1.我们能够定义几次构造函数? 我们可以定义 ...
- ngx-bootstrap使用01 安装ngx-bootstrap和bootstrap及其使用、外部样式引入
1 版本说明 2 新建一个angular项目 ng new 项目名 --stayle=scss 代码解释:创建一个样式文件格式为SCSS的angular项目 技巧01:由于我angular-cli的版 ...
- Win10_禁用自动更新(官方版)
1> win键>输入服务>打开>找到windowsUpdate-->启动类型为-禁用 -->> 恢复失三个选项改为-->>无操作 2>win ...
- (转)C++中使用C代码
昨晚看书的时候碰到一个问题,在C++中如何调用C代码...于是查了一下资料...发现了一个大神写的文章挺好的. -------------------------------------------- ...
- PCL—关键点检测(rangeImage)低层次点云处理
博客转载自:http://www.cnblogs.com/ironstark/p/5046479.html 关键点又称为感兴趣的点,是低层次视觉通往高层次视觉的捷径,抑或是高层次感知对低层次处理手段的 ...
- 算法Sedgewick第四版-第1章基础-023-MultiwordSearch.java
Multi-word search. Program MultiwordSearch.java reads a sequence of query words q[1], ..., q[k] from ...
- EZOJ #88
传送门 分析 自然想到二分 我们二分一个长度,之后考虑如何线性判断是否合法 我们可以维护一个单调队列表示从i开始的长度为d的区间和的最大值 每次用一段区间和减去它包含的长度为d的区间最大值即可 但是我 ...