您的位置:首页 > 理论基础 > 数据结构算法

数据结构学习笔记

2015-09-14 17:33 197 查看
前记:我知道这些代码很简单,只是让我想起了去年大一的生活,虽然我玩了挺多的,但也确实看了不少书,不仅是技术方面的,也有文学方面(写了大约10篇左右的文章,还投了稿),经济方面的,所以我大二的生活还是相对轻松简单的,回想我过去的岁月,深深地感觉确实是一份耕耘一份收获,不管那些大牛智商有多高,哪怕你一辈子也追不上那些大神,但只要你也走在追赶他们的道路上,蓦然回首,你会发现你其实已经收获了许多,况且人生也不完全是事业,每一个人都有自己的优势。不和他人比较,只和昨天的自己比较,确实是这样~~上代码的,也许对于我很简单的东西,刚入门的人却觉得很难,同理,我觉得难以理解的,肯定也有人觉得太简单了~~祝自己简单生活每一天么么哒~~

//注意用数组模拟栈,所有删除操作都是移动栈顶标记,因为数组难以进行删除操作
#include <iostream>
using namespace std;
class Stack
{
private:
    int *T;//动态申请空间的指针
    int n;//栈内的元素个数
    int maxsize;//栈的最大容量
public:
    Stack(int m);//创建栈
    ~Stack(){delete []T;}
    bool isempty(){return n==-1;}
    bool isfull(){return n==maxsize;}
    int  top();
    void push(int x);
    void pop();
};
Stack::Stack(int m)//传入多少个元素,鉴于栈是从0开始的所以必须最多到m-1
{
    maxsize=m-1;
    T=new int[m];
    n=-1;
}
int  Stack::top()
{
    if (isempty())
        cout<<"栈已经为空了么么哒~~\n";
    else
      return T
;

}
void Stack::push(int x)
{
    if (isfull())
        cout<<"我已经满了么么哒\n";
    else
        T[++n]=x;
}
void Stack::pop()
{

    if (isempty())
      cout<<"栈已经为空么么哒\n";
    else
     n--;
}
 int main()
 {
     int k;
     Stack A(5);//存放奇数
     Stack B(5);//存放偶数
     while(cin>>k)
     {
         if (k<0)
            cout<<"请输入正确的数,范围0~1000\n";
         else
         if (k%2)
            A.push(k);
         else
            B.push(k);
     }
     while(!A.isempty())
     {
         cout<<A.top()<<" ";
         A.pop();
     }
     cout<<endl;
     while(!B.isempty())
     {
         cout<<B.top()<<" ";
         B.pop();
     }
     cout<<endl;
     return 0;

 }


//用链接存储存储就不需要最大容量,注意用链杰存储就头节点就应当指向栈顶,插入元素时将新节点的下一个指向头节点,再让头节点为新节点,因为如果栈底为头节点,那么每次找栈顶压入删除都要花费大量时间~~
#include <iostream>
using namespace std;
class Stack;
class node
{
private:
     int element;
     node *next;
     friend Stack;
};
class Stack
{
private:
    int n;
    node *head;
public:
     Stack(){n=-1;}
     bool isempty(){return n==-1;}
     void push(int x);
     void pop();
     int top();
};
void Stack::push(int x)
{
    node *p=new node;
    p->element=x;
    p->next=head;
    head=p;
    n++;
}
void Stack::pop()
{
if (isempty())
cout<<"栈已经为空"<<endl;
else
{
 node *q=head;//先记下头节点,再让头节点的指向下一个
 head=head->next;
 delete(q);
 n--;
}
 }
int Stack::top()
{   if (isempty())
   cout<<"栈已经为空"<<endl;
else
 return head->element;
}
int main()
{
    int i;
    Stack A;
    for (i=1;i<=10;i++)
    A.push(i);
    for (i=1;i<=10;i++)
    {
        cout<<A.top()<<" ";
        A.pop();
    }
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: