【菜鸟er】C语言数据结构_动态栈应用

原创 2018年04月17日 18:12:08
#include <stdio.h>
#include <malloc.h>
#include <stdlib.h>
//#include <bits/stdc++.h>
//using namespace std;

//链表定义
typedef struct node{
    int data;
    struct node * pnext;
}NODE,*PNODE;

typedef struct stack{
	PNODE ptop;
	PNODE pbottom;
}STACK,* PSTACK;
//初始化栈
void init_stack(PSTACK ps);
//压栈
void push_stack(PSTACK ps,int val);
//遍历
void traverse_stack(PSTACK ps);
//出栈
bool pop_stack(PSTACK ps,int * pval);
//判断空
bool empty_stack(PSTACK ps);
//清空
void clear_stack(PSTACK ps);

int main()
{
	STACK s;
	init_stack(&s);

	push_stack(&s,1);
	push_stack(&s,2);
	push_stack(&s,3);
	push_stack(&s,4);
	push_stack(&s,5);
	push_stack(&s,6);

	int num=0;
	pop_stack(&s,&num);

	traverse_stack(&s);

	clear_stack(&s);
	traverse_stack(&s);


	return 0;
}

void init_stack(PSTACK ps)
{
	ps->ptop = (PNODE)malloc(sizeof(NODE));
	if(NULL == ps->ptop){
		printf("error!\n");
		exit(-1);
	}
	else
	{
		ps->pbottom = ps->ptop;
		ps->ptop->pnext = NULL;//初始化指向的那个空栈的指针域为null
	}
}

void push_stack(PSTACK ps,int val)
{
	PNODE pnew = (PNODE)malloc(sizeof(NODE));
	//完成pnew的制作
	pnew->data = val;
	pnew->pnext = ps->ptop;
	//指向pnew;
	ps->ptop = pnew;
}

bool empty_stack(PSTACK ps)
{
	if(ps->ptop == ps->pbottom)	return true;
	return false;
}

void traverse_stack(PSTACK ps)
{
	PNODE p = ps->ptop;
	while(p != ps->pbottom){
		printf("%d ",p->data);
		p = p->pnext;
	}
	return;
}

bool pop_stack(PSTACK ps,int * pval)
{
	//出栈数据存入pval所指向的变量
	if(empty_stack(ps))	return false;

	PNODE r = ps->ptop;
	ps->ptop = r->pnext;

	free(r);
	r = NULL;
}

void clear_stack(PSTACK ps)
{
	if(empty_stack(ps))	return;

	PNODE p = ps->ptop;//指向第一个
	PNODE q = p->pnext;//指向第二个

	while(p!=ps->pbottom){
		q = p->pnext;
		free(p);
		p = q;
	}
	ps->ptop = ps->pbottom;

}

C语言系列之 数据结构栈的运用

-
  • 1970年01月01日 08:00

数据结构基础(4)C语言实现栈--链式存储(动态栈)

数据结构基础---栈 概念,应用以及C语言实现代码。
  • Davidluo001
  • Davidluo001
  • 2015-06-19 14:14:11
  • 2583

数据结构-C语言 栈的简单应用——行编辑程序

设有一个行编辑程序的功能为:接收用户从终端输入的程序或数据,并存入用户的数据区。 当用户发现刚刚键入的一个字符是错的时,可补进一个退格符“#”,以表示前一个字符无效。 如果发现当前键入的行内差错较多或...
  • DXH924
  • DXH924
  • 2017-11-02 21:22:41
  • 341

数据结构之 栈(C语言实现)

数据结构之 栈(C语言实现)1.栈的模型栈(stack)是限制插入和删除只能在一个位置上进行的表,该位置是表的末端,叫做栈的顶(top)。对栈的基本操作有push(进栈)和pop(出栈),前者相当于插...
  • men_wen
  • men_wen
  • 2017-03-14 23:23:20
  • 1088

《数据结构》(C语言版)——栈的应用举例

/* run this program using the console pauser or add your own getch, system(&quot;pause&quot;) or inp...
  • prlhnxx
  • prlhnxx
  • 2018-03-07 17:27:16
  • 52

数据结构(严蔚敏)之三——顺序栈之c语言实现

实验: 编写一个程序实现顺序栈的各种基本运算,并在此基础上设计一个主程序,完成如下功能: (1)初始化顺序栈 (2)插入元素 (3)删除栈顶元素 (4)取栈顶元素 (5)遍历顺序栈 (6...
  • GreenHandCGL
  • GreenHandCGL
  • 2015-04-03 00:07:04
  • 2832

C语言数据结构----栈的定义及实现

本节主要说的是数据结构中的栈的基本定义和实现的方式,其中实现的方式采用的是复用顺序表和单向链表的方式。 一、栈的基本定义 1.栈是一种特殊的线性表,只能从固定的方向进出,而且栈进出的基本原则是:先进栈...
  • u010089238
  • u010089238
  • 2013-08-26 21:42:07
  • 10515

[数据结构与算法分析]栈的应用-学习笔记

平时我们很少接触到一个栈的使用,但是今天看了如下三个例子后感触颇深,对于栈应用的情况理解更深了。分享如下: 1、平衡符号 平衡是个动词,意思就是用来平衡符号的,例如关于方法里{}左右大括号的匹配问...
  • u014629433
  • u014629433
  • 2016-06-06 09:04:48
  • 826

C语言-数据结构-创建栈

#include #include #define maxsize 100 ///创建栈 typedef int data; typedef struct {     data *b...
  • xiaoguaiguaiYj
  • xiaoguaiguaiYj
  • 2017-05-24 23:09:13
  • 1895
收藏助手
不良信息举报
您举报文章:【菜鸟er】C语言数据结构_动态栈应用
举报原因:
原因补充:

(最多只允许输入30个字)