C语言中,栈的操作
来源:互联网 发布:mac ps 序列号 编辑:程序博客网 时间:2024/06/10 02:18
#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 pBottom;//指向栈底下一个没有实际意义的元素,主要是为了操作方便
}STACK,* PSTACK;
//函数声明
void init(PSTACK PS); //初始化栈
void push(PSTACK PS, int val); //进栈
void traverse(PSTACK PS); //遍历
int pop(PSTACK PS,int *popVal); //popVal为出栈的值,返回值为是否出栈成功
int is_empty(PSTACK PS); //判断栈是否为空
void clear(PSTACK PS);
int main()
{
STACK S;
int popVal;
init(&S); //初始化栈
push(&S,2); //进栈
push(&S,3);
push(&S,4);
push(&S,5);
push(&S,6);
push(&S,7);
traverse(&S); //遍历
pop(&S,&popVal);//出栈
printf("出栈的值是:%d\n", popVal);
clear(&S); //清空
traverse(&S); //遍历
return 0;
}
//初始化栈
void init(PSTACK PS)
{
PNODE p = (PNODE)malloc(sizeof(NODE));
if (p == NULL)
{
printf("动态内存分配失败!\n");
exit(-1);
}
PS->pBottom = p;
PS->pTop = p;
p->pNext = NULL;
}
//进栈
void push(PSTACK PS, int val)
{
PNODE newNode = (PNODE)malloc(sizeof(NODE));
if (newNode == NULL)
{
printf("构建新结点失败!\n");
exit(-1);
}
newNode->data = val;
newNode->pNext = PS->pTop;//newNode指向了pTop指向的结点
PS->pTop = newNode;
}
//遍历
void traverse(PSTACK PS)
{
PNODE temp = PS->pTop;
int i = 0;
while (temp != PS->pBottom)
{
i++;
printf("第%d个元素的值为:%d\n",i,temp->data);
temp = temp->pNext;
}
}
//判断栈是否为空
int is_empty(PSTACK PS)
{
if (PS->pTop == PS->pBottom)
{
return 0;
}
return 1;
}
//出栈
int pop(PSTACK PS, int *popVal)
{
if ( is_empty(PS) == 0)
{
printf("栈是空的,出栈失败!\n");
return 0;
}
PNODE p = (PNODE)malloc(sizeof(NODE));
p = PS->pTop;
PS->pTop = PS->pTop->pNext;
*popVal = p->data;
free(p);
printf("出栈成功!");
return 1;
}
//清空(结构还在,数据清除了,不同于销毁) 结构指的是:构建栈时top和bottom指向同一地址
void clear(PSTACK PS)
{
if (is_empty() == 0)
{
printf("栈为空!不能清空\n");
}
else
{
PNODE p = (PNODE)malloc(sizeof(NODE));
while (PS->pTop != PS->pBottom)
{
p = PS->pTop;
PS->pTop = PS->pTop->pNext;
free(p);
}
printf("清空成功!\n");
}
}
#include <malloc.h>
#include <stdlib.h>
//动态栈内核:链表
typedef struct Node
{
int data;
struct Node *pNext;
}NODE,* PNODE;
//栈
typedef struct Stack
{
PNODE pTop; //指向栈顶元素
PNODE pBottom;//指向栈底下一个没有实际意义的元素,主要是为了操作方便
}STACK,* PSTACK;
//函数声明
void init(PSTACK PS); //初始化栈
void push(PSTACK PS, int val); //进栈
void traverse(PSTACK PS); //遍历
int pop(PSTACK PS,int *popVal); //popVal为出栈的值,返回值为是否出栈成功
int is_empty(PSTACK PS); //判断栈是否为空
void clear(PSTACK PS);
int main()
{
STACK S;
int popVal;
init(&S); //初始化栈
push(&S,2); //进栈
push(&S,3);
push(&S,4);
push(&S,5);
push(&S,6);
push(&S,7);
traverse(&S); //遍历
pop(&S,&popVal);//出栈
printf("出栈的值是:%d\n", popVal);
clear(&S); //清空
traverse(&S); //遍历
return 0;
}
//初始化栈
void init(PSTACK PS)
{
PNODE p = (PNODE)malloc(sizeof(NODE));
if (p == NULL)
{
printf("动态内存分配失败!\n");
exit(-1);
}
PS->pBottom = p;
PS->pTop = p;
p->pNext = NULL;
}
//进栈
void push(PSTACK PS, int val)
{
PNODE newNode = (PNODE)malloc(sizeof(NODE));
if (newNode == NULL)
{
printf("构建新结点失败!\n");
exit(-1);
}
newNode->data = val;
newNode->pNext = PS->pTop;//newNode指向了pTop指向的结点
PS->pTop = newNode;
}
//遍历
void traverse(PSTACK PS)
{
PNODE temp = PS->pTop;
int i = 0;
while (temp != PS->pBottom)
{
i++;
printf("第%d个元素的值为:%d\n",i,temp->data);
temp = temp->pNext;
}
}
//判断栈是否为空
int is_empty(PSTACK PS)
{
if (PS->pTop == PS->pBottom)
{
return 0;
}
return 1;
}
//出栈
int pop(PSTACK PS, int *popVal)
{
if ( is_empty(PS) == 0)
{
printf("栈是空的,出栈失败!\n");
return 0;
}
PNODE p = (PNODE)malloc(sizeof(NODE));
p = PS->pTop;
PS->pTop = PS->pTop->pNext;
*popVal = p->data;
free(p);
printf("出栈成功!");
return 1;
}
//清空(结构还在,数据清除了,不同于销毁) 结构指的是:构建栈时top和bottom指向同一地址
void clear(PSTACK PS)
{
if (is_empty() == 0)
{
printf("栈为空!不能清空\n");
}
else
{
PNODE p = (PNODE)malloc(sizeof(NODE));
while (PS->pTop != PS->pBottom)
{
p = PS->pTop;
PS->pTop = PS->pTop->pNext;
free(p);
}
printf("清空成功!\n");
}
}
0 0
- C语言中,栈的操作
- C语言中栈的操作
- C语言中对文件的操作
- c语言中操作字符串的函数
- C语言中对文件夹的操作
- C语言中对文件的操作
- C语言中关于时间的操作
- c语言中字符串操作的函数
- C语言中对文件的操作
- C语言中对文件的操作
- C语言中结构体的操作
- C语言中字符串的操作
- C语言中,文件的操作
- C语言中数据库的基本操作
- C 语言中操作字符串的函数
- C语言中对文件的操作
- C语言中操作符的总结
- C语言中操作字符串
- C++各大有名库的介绍之C++标准库
- 三元组最小距离[阿里2013校招题目]
- 阿里云linux下安装mysql
- 一篇文章普及各种ios基本知识(防止奸商忽悠、鉴别假冒翻新机、知识入门必备)
- 清水设计表现~~~专业承接家装,工装效果图制作~~~
- C语言中,栈的操作
- 尤尼科技首推3D打印机使用教材 助力3D打印基础教育产业
- java socket单线程阻塞IO
- java 用poi框架读取excel 2010
- spring拦截器配置
- 网络基于NGN/IMS(SIP协议)通信平台融入视频监控业务
- 基本社会里模型的源码分析
- 全角字符unicode码对应表
- 基于Virtex系列FPGA的可编程嵌入式信号处理背板的设计