这样用C语言实现栈和往栈里插入和删除元素

这样用C语言实现栈和往栈里插入和删除元素,第1张

以下程序通过VC6.0的编译,作用是将你输入的整数转换为 2 进制数(通过辅助栈实现的,过程中用到了你所要求的方法)。

#include "stdio.h"

#include "stdlib.h"

#define MAX 50

#define OK 1

#define ERROR 0

#define YES 1

#define NO 0

typedef int ElemType

typedef int Status

typedef struct tagStack{

ElemType data[MAX]

int top

}Stack

void InitStack(Stack *s){

s->top=-1

}

Status isEmpty(Stack *s){

if(s->top==-1) return YES

return NO

}

Status Push(Stack *s,ElemType elme){

if(s->top>MAX)return ERROR

s->top++

s->data[s->top]=elme

return OK

}

ElemType Pop(Stack *s){

if(s->top==-1) return -1

return s->data[s->top--]

}

int main(void){

int flag

int b

ElemType elemy

Stack mystack

InitStack(&mystack)

printf("Input number please:\n")

scanf("%d",&flag)

while(flag<0){

printf("You must input a number(>0)\n")

scanf("%d",&flag)

}

while(flag!=0){

b=flag%2

if(Push(&mystack,b)==ERROR){

printf("ERROR\n")

break

}

flag=flag/2

}

printf("\n")

while(isEmpty(&mystack)!=YES){

elemy=Pop(&mystack)

printf("%d ",elemy)

}

printf("\n")

return 0

}

如输入整数65,以下是执行结果:

Input number please:

65

1 0 0 0 0 0 1

Press any key to continue

1、栈(stack)又名堆栈,它是一种运算受限的线性表。

其限制是仅允许在表的一端进行插入删除运算。这一端被称为栈顶,相对地,把另一端称为栈底。向一个栈插入新元素又称作进栈、入栈或压栈,它是把新元素放到栈顶元素的上面,使之成为新的栈顶元素;从一个栈删除元素又称作出栈或退栈,它是把栈顶元素删除掉,使其相邻的元素成为新的栈顶元素。

2、例程:

#include <stdio.h>

#include <stdlib.h>

#define Max 100

typedef char T

 

 

typedef struct MyStack

{

    T aa[Max]

    unsigned int p

               

} stack

 

//创建空栈

stack* createEmptyStack()

{

      stack* st = (stack *)malloc(sizeof(stack))

      int i=0

      for(i=0i<Maxi++)

         st->aa[i]=0

      st->p=0

      return st    

}

 

//栈判空

int isEmpty(const stack* st)

{

      if(st->p==0) return 1

      else     return 0

}

  

//求栈的大小

unsigned int size(const stack* st)

{

      return st->p

}

 

//push *** 作

void push(stack* st,const T a)

{

      st->p=st->p+1

      if(st->p==Max)

      {

          printf("栈满\n")

          st->p--

          return

      }

      st->aa[st->p]=a    

}

 

//pop *** 作

T pop(stack* st)

{

      if(isEmpty(st))

      {

          printf("栈空")

          return NULL

      }

      char t=st->aa[st->p]

      st->p=st->p-1 

      printf("%c ",t)

      return t     

}

 

//栈销毁

void destroy(stack* st)

{

    free(st)

}

 

int main()

{

     

    

    stack* st = createEmptyStack()

    if(isEmpty(st)) printf("MyStack is empty\n")

    else printf("MyStack is not empty\n")

    push(st,'a')

    push(st,'b')

    push(st,'c')

    push(st,'d')

    push(st,'e') 

    printf("%d\n",size(st))

    while(!isEmpty(st)) pop(st)

    destroy(st)

    system("pause")

    return 0

}


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/bake/11750096.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-18
下一篇 2023-05-18

发表评论

登录后才能评论

评论列表(0条)

保存