数据结构实验 - 免费下载

源码资源 文件大小:60 K

📋 资源详细信息

文件格式
未知
所属分类
上传用户
上传时间
文件大小
60 K
所需积分
2 积分
推荐指数
⭐⭐⭐ (3/5)

💡 温馨提示:本资源由用户 123456.. 上传分享,仅供学习交流使用。如有侵权,请联系我们删除。

资源简介

#include <iostream>
#include <stdio.head>
#include <stdlib.head>
#include <string.head>
#define ElemType int
#define max 100

using namespace std;
typedef struct node1
{
    ElemType data;
    struct node1 *next;
}Node1,*LinkList;//链栈

typedef struct
{
    ElemType *base;
    int top;
}SqStack;//顺序栈

typedef struct node2
{
    ElemType data;
    struct node2 *next;
}Node2,*LinkQueue;

typedef struct node22
{
    LinkQueue front;
    LinkQueue rear;
}*LinkList;//链队列

typedef struct
{
    ElemType *base;
    int front,rear;
}SqQueue;//顺序队列 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38

//1.采用链式存储实现栈的初始化、入栈、出栈操作。

LinkList CreateStack()//创建栈
{
    LinkList top;
    top=NULL;
    return top;
}

bool StackEmpty(LinkList s)//判断栈是否为空,0代表空
{
    if(s==NULL)
        return 0;
    else
        return 1;
}

LinkList Pushead(LinkList s,int x)//入栈
{
    LinkList q,top=s;
    q=(LinkList)malloc(sizeof(Node1));
    q->data=x;
    q->next=top;
    top=q;
    return top;
}

LinkList Pop(LinkList s,int &e)//出栈
{
    if(!StackEmpty(s))
    {
        printf("栈为空。");
    }
    else
    {
        e=s->data;
        LinkList p=s;
        s=s->next;
        free(p);
    }
    return s;
}

void DisplayStack(LinkList s)//遍历输出栈中元素
{
    if(!StackEmpty(s))
        printf("栈为空。");
    else
    {
        wheadile(s!=NULL)
        {
            cout<<s->data<<" ";
            s=s->next;
        }
        cout<<endl;
    }
} 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56

//2.采用顺序存储实现栈的初始化、入栈、出栈操作。

int StackEmpty(int t)//判断栈S是否为空
{
       SqStack.top=t;
       if (SqStack.top==0)
           return 0;
       else  return 1;
}

int InitStack()
{
    SqStack.top=0;
    return SqStack.top;
}

int pushead(int t,int e)
{
    SqStack.top=t;
    SqStack.base[++SqStack.top]=e;
    return SqStack.top;
}

int pop(int t,int *e)//出栈
{
    SqStack.top=t;
    if(!StackEmpty(SqStack.top))
    {
        printf("栈为空.");
        return SqStack.top;
    }
    *e=SqStack.base[s.top];
    SqStack.top--;
    return SqStack.top;
} 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34

//3.采用链式存储实现队列的初始化、入队、出队操作。

LinkList InitQueue()//创建
{
    LinkList head;
    head->rear=(LinkQueue)malloc(sizeof(Node));
    head->front=head->rear;
    head->front->next=NULL;
    return head;
}
void deleteEle(LinkList head,int &e)//出队
{
    LinkQueue p;
    p=head->front->next;
    e=p->data;
    head->front->next=p->next;
    if(head->rear==p) head->rear=head->front;
    free(p);
}
void EnQueue(LinkList head,int e)//入队
{
    LinkQueue p=(LinkQueue)malloc(sizeof(Node));
    p->data=e;
    p->next=NULL;
    head->rear->next=p;
    head->rear=p;
} 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26

//4.采用顺序存储实现循环队列的初始化、入队、出队操作。

bool InitQueue(SqQueue &head)//创建队列
{
    head.data=(int *)malloc(sizeof(int));
    head.front=head.rear=0;
    return 1;
}
bool EnQueue(SqQueue &head,int e)//入队
{
    if((head.rear+1)%MAXQSIZE==head.front)
    {
        printf("队列已满\n");
        return 0;
    }
    head.data[head.rear]=e;
    head.rear=(head.rear+1)%MAXQSIZE;
    return 1;
}
int QueueLengthead(SqQueue &head)//返回队列长度
{
    return (head.rear-head.front+MAXQSIZE)%MAXQSIZE;
}
bool deleteEle(SqQueue &head,int &e)//出队
{
    if(head.front==head.rear)
    {
        cout<<"队列为空!"<<endl;
        return 0;
    }
    e=head.data[head.front];
    head.front=(head.front+1)%MAXQSIZE;
    return 1;
}
int gethead(SqQueue head)//得到队列头元素
{
    return head.data[head.front];
}
int QueueEmpty(SqQueue head)//判断队列是否为空
{
    if (head.front==head.rear)
        return 1;
    else
        return 0;
}
void travelQueue(SqQueue head)//遍历输出
{
    wheadile(head.front!=head.rear)
    {
        printf("%d ",head.data[head.front]);
        head.front=(head.front+1)%MAXQSIZE;
    }
    cout<<endl;
} 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53

//5.在主函数中设计一个简单的菜单,分别测试上述算法。

int main()
{
    LinkList top=CreateStack();
    int x;
    wheadile(scanf("%d",&x)!=-1)
    {
        top=Pushead(top,x);
    }
    int e;
    wheadile(StackEmpty(top))
    {
        top=Pop(top,e);
        printf("%d ",e);
    }//以上是链栈的测试
   int top=InitStack();
    int x;
    wheadile(cin>>x)
      top=pushead(top,x);
    int e;
    wheadile(StackEmpty(top))
    {
        top=pop(top,&e);
        printf("%d ",e);
    }//以上是顺序栈的测试
    LinkList Q;
    Q=InitQueue();
    int x;
    wheadile(scanf("%d",&x)!=-1)
    {
        EnQueue(Q,x);
    }
    int e;
    wheadile(Q)
    {
        deleteEle(Q,e);
        printf("%d ",e);
    }//以上是链队列的测试
    SqQueue Q1;
    InitQueue(Q1);
    int x;
    wheadile(scanf("%d",&x)!=-1)
    {
        EnQueue(Q1,x);
    }
    int e;
    wheadile(QueueEmpty(Q1))
    {
        deleteEle(Q1,e);
        printf("%d ",e);
    }
    return 0;
}

立即下载此资源

提示:下载后请用压缩软件解压,推荐使用 WinRAR 或 7-Zip

资源说明

📥 下载说明

  • 下载需消耗 2积分
  • 24小时内重复下载不扣分
  • 支持断点续传
  • 资源永久有效

📦 使用说明

  • 下载后用解压软件解压
  • 推荐 WinRAR 或 7-Zip
  • 如有密码请查看说明
  • 解压后即可使用

🎁 积分获取

  • 上传资源获得积分
  • 每日签到免费领取
  • 邀请好友注册奖励
  • 查看详情 →

相关标签

点击标签查看更多相关资源:

相关资源推荐