数据结构栈 学习笔记

栈是先进后出的数据结构。

下面直接上代码了。下面使用数据模仿栈式结构。

//
//  main.cpp
//  StudyC++
//
//  Created by 杜甲 on 14-9-12.
//  Copyright (c) 2014年 杜甲. All rights reserved.
//

#include <iostream> //std::cout
#include <stdio.h>
using namespace std;

#define MaxSize 10
int stack[MaxSize];
int top = -1;

void push(int value)
{
    int i;
    if (top >= MaxSize)
        std::cout<<"\nThe stack is full"<<endl;
    else
    {
        std::cout<<"\nThe stack content before(top->bottom):"<<endl;
        for (i = top; i >= 0; i--)
            cout<<stack[i]<<endl;

        top++;
        stack[top] = value; //将数据放入数组中
        cout<<"The stack content after push(top->bottom):"<<endl;
        for (i = top; i >= 0; i--)
            cout<<stack[i]<<endl;

    }

}

int pop()
{
    int temp;
    int i;
    if (top < 0)
    {
        cout<<"The stack is empty!"<<endl;
        return -1;
    }

    cout<<"The stack content before(top->bottom):"<<endl;

    for (i = top; i >= 0; i--)
        cout<<stack[i]<<endl;

    temp = stack[top];
    top--;
    printf("\nThe pop value is [%d]",temp);
    printf("\nThe stack content after pop(top->bottom):");
    for (i = top; i >= 0; i--)
        printf("[%d]",stack[i]);
    printf("\n");

    return temp;
}

int main(int argc, const char * argv[])
{

    //测试
    push(3);
    push(5);
    push(9);
    int num = pop();
    printf("num = %d\n",num);
    num = pop();
    printf("num = %d\n",num);
    push(7);

    return 0;
}

用链表模仿栈

//
//  main.cpp
//  StudyC++
//
//  Created by 杜甲 on 14-9-12.
//  Copyright (c) 2014年 杜甲. All rights reserved.
//

#include <iostream> //std::cout
#include <stdio.h>
using namespace std;

struct s_node
{
    int data;
    struct s_node *next;
};
typedef struct s_node s_list;
typedef s_list *link;
link stack = nullptr;

void print_stack()
{
    link temp = nullptr;
    temp = stack;
    if (temp == nullptr)
        printf("The stack is empty!\n");
    else
    {
        while (temp != nullptr)
        {
            printf("[%d]",temp->data);
            temp = temp->next;
        }
        printf("\n");
    }

}

void push(int value)
{
    link newnode;
    printf("\nThe stack content before(top->bottom):");
    print_stack();

    //初始化
    newnode = (link)malloc(sizeof(s_list));
    //赋值
    newnode->data = value;
    //栈是先进后出 将之前的节点放到后面
    newnode->next = stack;
    //将新的放到前面
    stack = newnode;

}

int pop()
{
    link top;
    int temp;
    printf("\nThe stack content before(top->bottom):");
    print_stack();
    if (stack != nullptr)
    {
        top = stack;
        stack = stack->next;
        temp = top->data;
        free(top);
        return temp;

    }else{
        return -1;
    }
}

int main(int argc, const char * argv[])
{
    push(9);
    push(10);

    pop();

    push(11);
    print_stack();
    return 0;
}

原文地址:http://blog.csdn.net/qqmcy/article/details/39393941

时间: 2024-11-10 15:17:02

数据结构栈 学习笔记的相关文章

数据结构 栈 学习笔记1

//SeqStack.h typedef struct stack { DATA data[SIZE+1];  //数据元素  int top;  //栈顶  }SeqStack; SeqStack *SeqStackInit() { SeqStack *p; if(p=(SeqStack *)(malloc)(sizeof(SeqStack)))  //申请栈内存  { p->top = 0; //设置栈顶为零  return p; //返回指向栈的指针  } return NULL; } i

《大话数据结构》学习笔记 排序

排序的严格定义:  假设含有n个记录的序列为{r1,r2,......,rn},对应的关键字分别为{k1,k2......,kn},需确定1,2,......,n的一种排列p1,p2,......,pn,使其相应的关键字 满足Kp1<=Kp2<=......Kpn关系,即使得序列成为一个按关键字有序的序列(rpq,rp2,......rpn),此操作称为排序.  排序的稳定性:内排序与外排序(根据记录是否全部放置在内存中). 根据排序中的主要操作,可以分为插入排序类(直接插入排序->希尔

栈学习笔记2

//SeqStack.h typedef struct stack { DATA data[SIZE+1];  //数据元素  int top;  //栈顶  }SeqStack; SeqStack *SeqStackInit() { SeqStack *p; if(p=(SeqStack *)(malloc)(sizeof(SeqStack)))  //申请栈内存  { p->top = 0; //设置栈顶为零  return p; //返回指向栈的指针  } return NULL; } i

栈学习笔记

栈 栈是特殊的链表,只能在表尾进行插入(push)和删除(pop),具有后进先出的特点(LIFO) 链表分为动态链表和表态链表.动态链表是根据需要给栈元素分配存储空间,而静态链表则是固定存储空间的. C++ STL(Standard Template Library, 即标准模板库) 定义了栈的基本操作, 需要包含<stack>头文件.示例代码如图1-1所示. #include <iostream> #include <stack> using namespace st

数据结构 链表学习笔记

#include<stdio.h> #include<stdlib.h> #include<string.h> struct stu_node{ char num[15]; int score; struct stu_node *next; }; struct stu_node *stu_create() { struct stu_node *head, *newN, *tail; char num[15]; int score; printf("请输入学生的

数据结构入门学习笔记-1

一.用计算机解决问题的步骤: 1.抽象出合适的数学模型 2.设计解决模型算法 3.编程,测试. 二.数值问题(可用数学方程解决)和非数值问题 数值问题比如:求解梁的受力:人口预测等: 非数值问题:图书馆书目的查找(线性结构):棋盘的博弈(树结构):路口交通灯设计(图结构)

数据结构 递归 学习笔记

求阶乘 #include<stdio.h> int fact(int n); int main() { int i; printf("请输入要求阶乘的一个整数:"); scanf("%d",&i); printf("%d的阶乘结果为:  %d\n",i,fact(i)); getch(); return 0; } int fact(int n) { if(n<=1) return 1; else  return n*fa

数据结构 递归 学习笔记2

进制转换  例如十进制转换其他进制 #include<stdio.h> #include<string.h> void convto (char *s , int n , int b) { char bit[]={"0123456789ABCDEF"}; int len; if(n==0) { strcpy(s,""); return; } convto(s,n/b,b); len = strlen(s); s[len] = bit[n%b]

数据结构 枚举学习笔记

5 5 5 5 5 = 5 填上  加减乘除 #include<stdio.h> int main() { int j,i[5]; int sign; int result; int count; int num[6]; float left ,right; char oper[5]={' ','+','-','*','/'}; printf("请输入5个数:"); for(j=1;j<=5;j++) scanf("%d",&num[j])