问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

栈的c语言实现基本操作

发布网友 发布时间:2022-04-20 04:34

我来回答

2个回答

热心网友 时间:2022-04-18 10:11

写了一个链式栈,你看看

# 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;//pBottem是指向栈底下一个没有实际意义的元素
}STACK, *PSTACK;

void init( PSTACK );
void push( PSTACK, int );
void traverse( PSTACK );
int pop( PSTACK, int * );
int empty( PSTACK pS );

int main( void )
{
STACK S;//STACK等价于struct Stack
int val;

init( &S );//目的是造出一个空栈
push( &S, 1 );//压栈
push( &S, 2 );
push( &S, 3 );
push( &S, 4 );
push( &S, 5 );
push( &S, 6 );
push( &S, 7 );
traverse( &S );//遍历输出

//clear( &S ); //清空数据
//traverse( &S );//遍历输出

if( pop( &S, &val ) )
{
printf( "出栈成功,出栈的元素是%d\n", val );
}
else
{
printf( "出栈失败" );
}
traverse( &S );//遍历输出出栈之后的元素

return 0;
}

void init( PSTACK pS )
{
pS->pTop = ( PNODE )malloc( sizeof( NODE ) );
if( NULL == pS->pTop )
{
printf( "动态内存分配失败!\n" );
exit( -1 );
}
else
{
pS->pBottom = pS->pTop;
pS->pTop->pNext = NULL;//或是pS->pBottom = NULL;
}
}

void push( PSTACK pS, int val )
{
PNODE pNew = ( PNODE )malloc( sizeof( NODE ) );
pNew->data = val;
pNew->pNext = pS->pTop;//pS->Top不能改为pS->pBottom
pS->pTop = pNew;

}
void traverse( PSTACK pS )
{
PNODE p = pS->pTop;

while( p != pS->pBottom )
{
printf( "%d ", p->data );
p = p->pNext;
}
printf( "\n" );

}

int empty( PSTACK pS )
{
if( pS->pTop == pS->pBottom )
return 1;
else
return 0;
}

//把pS所指向的栈出栈一次,并把出栈的元素存入pVal形参所指向的变量中,如果出栈失败,则返回false,否则true
int pop( PSTACK pS, int *pVal)
{
if( empty( pS ) )//pS本身存放的就是S的地址
{
return 0;
}
else
{
PNODE r = pS->pTop;
*pVal = r->data;
pS->pTop = r->pNext;
free( r );
r = NULL; //为什么要把r赋给NULL呢??

return 1;
}
}

//clear清空
void clear( PSTACK pS )
{
if( empty( pS ) )
{
return ;
}
else
{
PNODE p = pS->pTop;
PNODE q = p->pNext;

while( p != pS->pBottom )
{
q = p->pNext;
free( p );
p = q;
}
pS->pTop = pS->pBottom;
}
}

热心网友 时间:2022-04-18 11:29

#include<stdio.h>
#include<stdlib.h>
#include<malloc.h> 
#define stack_init_size 20
#define increasesize 10;
typedef int ElemType;
typedef struct node{
ElemType *base;
ElemType *top;
int  size;
}stack;

void creat(stack *s)
{
s->base=(ElemType *)malloc(sizeof(ElemType));
if(!s->base)
{
exit(0);
}
s->base=s->top;
s->size= stack_init_size;
}

void push(stack *s,ElemType e)
{
if( s->top - s->base >= s->size )
{
 s->base=(ElemType *)realloc(s->base,(s->size+increasesize)*sizeof(ElemType));
if(!s->base)
{
 exit(0);

s->top=s->base+s->size;
s->size+=increasesize;
}
*(s->top)=e;
s->top++;
}

void pop(stack *s,ElemType *e)
{
   if(s->top==s->base)
   {
     return;
   }
   *e=*--(s->top); 
}
int stacklen(stack s)
{
return (s.top-s.base);

int main()
{
stack s;
int n;
    ElemType e1,e2,d;
    int i=1,j=1;
    push(&s,i);
    push(&s,j);
    scanf("%d",&n);
    while(n--)
    {
        pop(&s,&e1);
    pop(&s,&e2);
    d=e1+e2;
    push(&s,e2);
    push(&s,d);
    }
    pop(&s,&d);
    printf("%d",d);
    return 0;
}

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
轻度慢性萎缩性胃炎 活动期,伴轻度肠 化 胃角多发糜烂。医生说了我... 胃窦粘膜慢性轻度萎缩性炎伴轻度肠化胃窦粘膜慢性轻度萎缩性炎? 芬兰留学读研费用是多少 芬兰留学读研时间 去芬兰留学学费生活费一年要多少 芬兰留学读研费用是多少? 芬兰留学读研学费多少? 感冒好多天了,可不可以打蓝球或者其它运动出出汗啊? 感冒打喷嚏,鼻塞然后可以让自己多出出汗吗 宝宝感冒了能去游泳吗 什么是栈?请说明详细一些 用栈的顺序存储结构实现栈的各种基本操作 编程高手帮帮忙!栈的基本操作 基本运算的栈的定义及基本运算 栈的基本操作 栈的基本操作的实现(c语言),高手速来!! 数据结构中栈的基本操作,如InitStack(&s)中用了引... 什么是栈,栈的基本运算是什么? 栈的操作 堆栈的基本操作有哪几个? 栈的基本操作~ 不知道怎么错的~ 求大侠~ 栈的基本操作有哪些? 以下哪一个不是栈的基本运算 计算机的发展分为四个阶段,那么各个阶段的特征是什么? 二零一五年安庆市九年级第一次模拟考试英语作文范文 初三第一单元英语作文《怎样学好英语》 急求九年级英语作文(寒假),好心人赶紧帮个忙 仁爱版九年级上学期必考的12篇英语作文 人教版九年级英语作文 九年级英语作文怎么写 急!!求栈的基本操作 栈的基本操作的C语言程序 数据结构实验(用c语言写) 栈的基本操作 百度输入法按键音和按键振动怎么设置? 百度输入法按键音怎样去除 百度输入法!!!!他妈的按键音怎么去除!听得烦... 百度输入法按键音怎样去除,百度输入法按键音 苹果手机关闭了按键音,怎么打字时还有声音,我用... 百度输入法的按键音怎么取消啊? 百度输入法的声音怎么关闭 安卓版本的百度输入法按键音怎么换 电脑上如何设置 百度输入法 或者 搜狗输入法 的按... iphone6用百度输入法,按键声音怎么关掉。 iphone 6用百度输入法时按键声音怎么关掉? 最新的百度输入法如何关闭按键音 红米Note手机里的百度输入法按键音怎么修改或去掉 计算机的四个阶段的主要特征 武装突袭2原版怎么调中文 win7下载的武装突袭2 怎么设置中文 steam上的武装突袭2怎么调成中文?打算入手