c语言数据结构题

用两个链式栈实现入栈出栈操作,如一个链式栈入栈是12345然后出栈,同时把出栈的元素进入另一个栈中,最后把另一个栈中的元素全部输出12345拜托了!... 用两个链式栈实现入栈出栈操作,如一个链式栈入栈是1 2 3 4 5然后出栈,同时把出栈的元素进入另一个栈中,最后把另一个栈中的元素全部输出1 2 3 4 5
拜托了!
展开
 我来答
百度网友8b58de0
2019-04-05 · TA获得超过945个赞
知道小有建树答主
回答量:1079
采纳率:83%
帮助的人:322万
展开全部

这是按题目要求写的,有任何问题追问

#include <stdio.h>

typedef int StackDataType;
typedef struct _StackData{
StackDataType data;
_StackData *up;
_StackData *next;
}StackData;

typedef struct _Stack{
_StackData *head;
_StackData *last;
int length;
}Stack;

void initStack(Stack *s)
{
s->head=0;
s->last=0;
s->length=0;
}

void push(Stack *s, StackDataType dat)
{
StackData *curr;
if(!s->last)
{
s->head=s->last=new StackData;
curr=s->last;
curr->up=0;
}
else
{
curr=s->last;
curr->next=s->last=new StackData;
s->last->up=curr;
curr=s->last;
}
curr->next=0;
curr->data=dat;
s->length++;
}

int pop(Stack *s, StackDataType *pdat)
{
StackData *curr;
if(!s->last) return 0;
curr=s->last;
if(curr->up)
{
s->last=curr->up;
s->last->next=0;
}
else
{
s->head=s->last=0;
}
*pdat=curr->data;
delete[]curr;
s->length--;
return 1;
}

void freeStack(Stack *s)
{
StackData *curr,*curr2;
curr=s->head;
while(curr)
{
curr2=curr->next;
delete[]curr;
curr=curr2;
}
s->head=0;
s->last=0;
s->length=0;
}

void main()
{
int i,dat;
Stack s1,s2;

initStack(&s1); //初始化栈1
initStack(&s2); //初始化栈2

for(i=1;i<=5;i++)
{
push(&s1,i); //栈1分别入栈数据1 2 3 4 5
}
for(i=0;i<5;i++)
{
pop(&s1,&dat); //栈1出栈
push(&s2,dat); //栈2入栈
}
for(i=0;i<5;i++)
{
if(i) printf(" "); //显示第一个数据前面不加空格
pop(&s2,&dat); //栈2出栈
printf("%d",dat); //显示栈2出栈的数据
}

freeStack(&s1); //释放栈1内存,如果数据未全部出栈,会把未释放的内存释放
freeStack(&s2); //释放栈2内存,如果数据未全部出栈,会把未释放的内存释放
}
itunes0004
2019-04-08 · TA获得超过4045个赞
知道大有可为答主
回答量:2685
采纳率:69%
帮助的人:524万
展开全部

用了 c++ class的思想

#include <stdio.h>
#include <malloc.h>
#include <assert.h>
typedef int DataType;
typedef struct StackNode StackNode;
struct StackNode{
  DataType data;
  StackNode* next;
};
class Stack {
  StackNode* tail;
public:
  bool isEmpty() {
    return NULL == tail;
  }
  Stack() : tail(NULL) {}
  bool push(DataType d) {
    StackNode *node = (StackNode*)malloc(sizeof(StackNode));
    if(!node) return false;
    node->next = tail;
    node->data = d;
    tail = node;
    return true;
  }
  DataType pop() {
    assert(!isEmpty());
    StackNode* temp = tail;
    DataType d = tail->data;
    tail = temp->next;
    free(temp);
    return d;
  }
  ~Stack() {
    while(!isEmpty()) {
      pop();
    }
  }
};
int main() {
  Stack s1, s2;
  for(int i = 1; i <= 5; ++i) {
    s1.push(i);
    printf("元素 %d 入栈到 s1\n", i);
  }
  while(!s1.isEmpty()) {
    DataType d = s1.pop();
    printf("元素 %d 从 s1 出栈\n", d);
    s2.push(d);
    printf("元素 %d 入栈到 s2\n", d);
  }
  while(!s2.isEmpty()) {
    printf("元素 %d 从 s2 出栈\n", s2.pop());
  }
}

执行结果如下:

元素 1 入栈到 s1
元素 2 入栈到 s1
元素 3 入栈到 s1
元素 4 入栈到 s1
元素 5 入栈到 s1
元素 5 从 s1 出栈
元素 5 入栈到 s2
元素 4 从 s1 出栈
元素 4 入栈到 s2
元素 3 从 s1 出栈
元素 3 入栈到 s2
元素 2 从 s1 出栈
元素 2 入栈到 s2
元素 1 从 s1 出栈
元素 1 入栈到 s2
元素 1 从 s2 出栈
元素 2 从 s2 出栈
元素 3 从 s2 出栈
元素 4 从 s2 出栈
元素 5 从 s2 出栈
本回答被提问者和网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
来自翠微峰唇红齿白的天鹅
2019-04-06 · 贡献了超过379个回答
知道答主
回答量:379
采纳率:0%
帮助的人:27.4万
展开全部
相互信任徐若瑄如u日杜若溪日常太辛苦太开放辛苦费辛苦费覅傅希如续租人族入组u吸热uu导入打扰打扰
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式