zoukankan      html  css  js  c++  java
  • 数据结构栈和队列的实现

    数据结构的实验,栈和队列的实现。

    栈的特点:先进后出,类似于一个只有一个口子,且一次只能容一个物体通过的容器,放在上面的物体必须先拿出才能拿下面的。

    队列的特点:先进先出,类似于火车通过隧道,先进入隧道的先出隧道,切只能从隧道一边进入,一边出去。

    我下面用的是链式结构来实现。

    首先是栈的代码:

     1 #include<iostream>
     2 using namespace std;
     3 //************链式栈的应用************
     4 //结构定义 
     5 typedef struct StackNode{
     6     int data;
     7     struct StackNode *next;
     8 }StackNode,*LinkStack;
     9 
    10 //初始化 
    11 void InitStack(LinkStack &S)
    12 {
    13     S = NULL;
    14 }
    15 
    16 //入栈
    17 void Push(LinkStack &S,int e)
    18 {
    19     StackNode *p = new StackNode;//创建一个新节点 
    20     p->data = e;//新节点的值为 e 
    21     p->next = S;//S为上一次的第一个节点,让新加入的节点指向它; 
    22     S = p;//将新加入的节点为S(第一个节点) 
    23 }
    24 
    25 //删除栈顶元素
    26 void Pop(LinkStack &S)
    27 {
    28     if(S == NULL)
    29     {
    30         cout<<"栈已空"<<endl;
    31         return; 
    32     }
    33     StackNode *p = new StackNode;
    34     p = S;
    35     S = S->next;
    36     delete p;
    37 }
    38 
    39 //判断栈是否为空
    40 int StackEmpty(LinkStack S)
    41 {
    42     if(S == NULL)
    43         return 1;
    44     else
    45         return 0;
    46 }
    47 
    48 //取栈顶元素
    49 int GetTop(LinkStack S)
    50 {
    51     if(S != NULL)
    52         return S->data;
    53 }
    54 
    55 int main()
    56 {
    57     LinkStack S;
    58     int n,a;
    59     while(cin>>n)
    60     {
    61         InitStack(S);
    62         for(int i=0; i<n; ++i)
    63         {
    64             cin>>a;
    65             Push(S,a);//入栈
    66         }
    67         
    68         while(!StackEmpty(S))
    69         {
    70             cout<<GetTop(S)<<' ';//出栈 
    71             Pop(S);//删除栈顶元素 
    72         }
    73         cout<<endl;
    74     }
    75     delete S;
    76     return 0;
    77 }

    接着是队列的代码:

     1 #include<iostream>
     2 using namespace std;
     3 //**************链式队列应用**************
     4 
     5 //结构定义
     6 typedef struct QNode{
     7     int data;
     8     struct QNode *next;
     9 }QNode,*QueuePtr;
    10 typedef struct{
    11     QueuePtr front,rear;
    12 }LinkQueue;
    13 
    14 //初始化 
    15 void InitQueue(LinkQueue &Q)
    16 {
    17     Q.front = Q.rear = new QNode;
    18     Q.front->next = NULL;
    19 }
    20 
    21 
    22 //入队
    23 void EnQueue(LinkQueue &Q,int e)
    24 {
    25     QNode *q = new QNode;
    26     q->data = e;
    27     q->next = NULL;
    28     Q.rear->next = q;
    29     Q.rear = q;
    30 }
    31 
    32 //判断队列是否为空
    33 int QueueEmpty(LinkQueue Q)
    34 {
    35     if(Q.rear == Q.front)
    36         return 1;
    37     else 
    38         return 0;
    39  } 
    40 
    41 //删除队头元素 
    42 void DeQueue(LinkQueue &Q)
    43 {
    44     if(Q.rear == Q.front)
    45     {
    46         cout<<"队列已空"<<endl;
    47         return;
    48     }
    49     QNode *q = new QNode;
    50     q = Q.front->next;
    51     Q.front->next = q->next;
    52     if(Q.rear == q)
    53         Q.rear = Q.front;
    54     delete q;
    55 }
    56 
    57 //出队
    58 int GetQueue(LinkQueue Q)
    59 {
    60     if(Q.front != Q.rear)
    61         return Q.front->next->data;
    62 }
    63 
    64 void Cancel(LinkQueue &Q)
    65 {
    66     delete Q.rear;
    67     delete Q.front;
    68 }
    69 
    70 int main()
    71 {
    72     LinkQueue Q;
    73     int n,a;
    74     while(cin>>n)
    75     {
    76         InitQueue(Q);
    77         for(int i=0; i<n; ++i)
    78         {
    79             cin>>a; 
    80             EnQueue(Q,a);//入队 
    81         }
    82         
    83         while(!QueueEmpty(Q))
    84         {
    85             cout<<GetQueue(Q)<<' ';//出队 
    86             DeQueue(Q);//删除队顶元素 
    87         }
    88         cout<<endl;
    89     }
    90     Cancel(Q);
    91     return 0;
    92 }

    因为是数据结构是实验,所以写的比较简单,以后有时间再写个详细的。

  • 相关阅读:
    log4j.properties配置详解
    maven常用命令集
    maven核心,pom.xml详解
    如何学习一门新技术?
    主题模型(概率潜语义分析PLSA、隐含狄利克雷分布LDA)
    聚类
    梯度下降中的学习率如何确定
    GPU版的tensorflow在windows上的安装时的错误解决方案
    maven笔记(maven使用与安装,eclipse中maven的配置,maven项目的创建)
    RNN的介绍
  • 原文地址:https://www.cnblogs.com/tuyang1129/p/9140681.html
Copyright © 2011-2022 走看看