线性表作业-三栈共享

1. 写在前面

代码不是源代码,不能直接用。

2. 题目要求

使用游标形式使得三栈共享。
用一维数组A[m]存储空间建立三个栈,其中前三个单元的next存放三个栈顶的指针, 第四个单元起共享。
从键盘输入n个整数按下列条件进栈: 
(1)  t<80 进1栈 
(2)  80=<t<=100 进2栈
(3)  t>100 进3栈

3. 代码

3.1 结构体和函数声明

//#define MAX
typedef struct node
{
    int data;
    int next;
} Node;
int Share(Node A[], int n);
void Print(Node A[]);
void Cancel(Node A[], int top, int n);

3.2 主函数

void main()
{
    Node A[MAX];
    int top=Share(A, n); //n为入栈的元素个数
    Print(A);
    Cancel(A, top, n);
    Print(A);
}

3.3 构建三栈共享

int Share(Node A[], int n) //参考头插法
{
    for(i=0; i<3; i++) //存储空间建立三个栈,其中前三个单元的next存放三个栈顶的指针
        A[i].next=0;
    for(i=3; i<n+2; i++) //n个元素
        A[i].next=i+1;
    A[n+2].next=0;
    for(i=n+3; i<MAX; i++)
        A[i].next=i+1;
    A[MAX-1].next=0;
    top=3; //top栈顶
    for(i=3; i<=n+2; i++)
    {
        j=top;
        //读取进栈元素
        A[j].data=t;
        //以下确定top值
        if(i==n+2)
            top=n+2;
        else
            top=A[j].next;
        //
        if(压入一栈)
        {
            A[j].next=A[0].next;
            A[0].next=j;
        }
        else if(压入二栈)
        //同理
        else if(压入三栈)
        //同理
    }
    return top;
}

入栈的方式可以参考链表的头插法,至于尾插法是否可行读者可以自行研究。

3.4 输出各栈元素

void Print(Node A[])
{
    for(i=0; i<3; i++)
    {
        j=A[i].next;
        if(j==0)
            printf("栈空");
        while(j!=0)
        {
            printf(A[j].data);
            k=j;
            j=A[k].next;
        }
        printf("\n");
    }
}

3.5 出栈

void Cancel(Node A[], int top, int n)
{
    //输入删除第几栈元素的选择
    //此前需要确保出栈选择不空,自己写
    i=A[ch].next;
    A[ch].next=A[i].next;
    A[i].next=n+3; //回收,将空闲链到待用的表头
    top=i; //此时top为删除后的元素下标
}

出栈要保证“先入后出”。

4. 声明

博客园地址:槐桕 - 博客园

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值