使用数组的堆栈的C ++实现

时间:2017-07-20 06:07:55

标签: c++ arrays stack

我已经研究了从算法入门到算法的算法 我写了这段代码。但在我的输出中,另一个值显示为索引0.当我使用pop函数时,它显示1而不是3

#include <iostream>

int top;
void initialise_top(){
top = -1;
}

bool stack_empty(int a[]){
if(top == -1)
    return true;
else
    return false;
}

void push(int a[], int x, int s){
if(top < s - 1){
top = top + 1;
a[top] = x;
}
else
    std::cout << "overflow" << "\n";
}

int pop(int a[]){
if (stack_empty(a) == true)
    std::cout << "Underflow" << "\n";
else{
    --top;
    return a[top+1];
}
}

void display(int a[]){
  for(int i = 0;i <= top; i++){
    std::cout << a[i] << " ";
  }
}
int main()
{
    int arr[7];
    push(arr,15,7);
    push(arr,6,7);
    push(arr,2,7);
    push(arr,9,7);
    push(arr,17,7);
    push(arr,3,7);
    display(arr);
    std::cout << "\n";
    int out = pop(arr);
    std::cout << pop << "\n";

    return 0;
}

以下是输出的快照 enter image description here

4 个答案:

答案 0 :(得分:1)

在您的实现中,您具有“initialise_top()”函数。

void initialise_top(){
   top=-1;
}

但是你没有在main函数中调用它。如果不调用它,则无法初始化“top”变量,“top”变量将保存垃圾值。 你可以在这里阅读详细信息: Default variable value

同样在theese系列你也有一些错误:

int out=pop(arr);
std::cout<<pop<<"\n";

你必须打印“out”变量:

std::cout << out << "\n";

您可以在此处查看已更正的实施代码:

https://repl.it/JaOd/0

答案 1 :(得分:0)

我在C中有这个堆栈数组代码。您可以使用它作为向C ++实现它的指南。

#include <stdio.h>
#include <stdlib.h>

void push(void);
void pop(void);

int a[5];
int top = -1;
int counter = 0;
int choice;


main() {

do{
    printf("*********************************************\nSTACK\nPress the 
corresponding button you desire.\n\nPress 1 to push a number to 
stack.\nPress 2 to display the current stack.\nPress 3 to pop the current 
stack.\nPress 0 to exit.\n\n");
    scanf("%d", &choice);
    if(choice == 0){
        choice = 0;
    }
    else if(choice == 1){
        push();
    }
    else if(choice == 2){
        int i;
    printf("Current Stack:\n");
    for(i = 0;i <= 4;i++){
        printf("%d", a[i]);
    }
    printf("\n\n");
    }
    else if(choice == 3){
        pop();
    }
 }while(choice != 0);


 }

 void push(){

    if(top <= 3){
    int input;
    printf("Enter number to push: ");
    scanf("%d", &input);
    top = top + 1;
    a[top] = input;

    int i;
    printf("Current Stack:\n");
    for(i = 0;i <= 4;i++){
        printf("%d", a[i]);
    }
    printf("\n\n");
    }else{
    printf("Out of Bounds\n\n");
    exit(0);
    }
}

void pop(){
    if(top >= 0){ 
    printf("You just popped: ");
    printf("%d \n\n", a[top]);
    a[top] = 0;

    printf("Current Stack:\n");
    int i;
    for(i = 0;i <= 4;i++){
        printf("%d", a[i]);
    }
    printf("\n\n");
    top = top - 1;
    }else{
    printf("Out of Bounds\n\n");
    exit(0);
    }

 }

答案 2 :(得分:0)

#include <iostream>

int top;
void initialise_top(){
top=-1;}

bool stack_empty(int a[]){
if(top==-1)
 return true;
else
 return false;
}

void push(int a[],int x,int s){
if(top<s-1){
top=top+1;
a[top]=x;
}
else
std::cout<<"overflow"<<"\n";
}

int pop(int a[]){
if (stack_empty(a)==true)
 std::cout<<"Underflow"<<"\n";
else{
 --top;
return a[top+1];
}
}

void display(int a[]){
  for(int i=0;i<=top;i++){
   std::cout<<a[i]<<" ";
}
}
int main()
{
   **initialise_top();**//this statement initialises top=-1
  int arr[7];
  //std::cout<<stack_empty(arr)<<"\n";
  push(arr,15,7);
  push(arr,6,7);
  push(arr,2,7);
  push(arr,9,7);
  push(arr,17,7);
  push(arr,3,7);
  display(arr);
  std::cout<<"\n";
  int out=pop(arr);
  std::cout<<**out**<<"\n";
  return 0;
}

1.在你的程序中,插入第一个元素15时top = 1的值。应有   为索引0显示另一个值。   因此要使top = 0,请在main函数中调用函数initialise_top();。 2.显示3而不是1使用 std::cout<<out<<"\n"; 程序中的修改是粗体。

答案 3 :(得分:0)

我试图改进我的代码。请告诉我是否可以改进。

android.R.layout.simple_list_item_1