c语言数据结构题
用两个链式栈实现入栈出栈操作,如一个链式栈入栈是12345然后出栈,同时把出栈的元素进入另一个栈中,最后把另一个栈中的元素全部输出12345拜托了!...
用两个链式栈实现入栈出栈操作,如一个链式栈入栈是1 2 3 4 5然后出栈,同时把出栈的元素进入另一个栈中,最后把另一个栈中的元素全部输出1 2 3 4 5
拜托了! 展开
拜托了! 展开
展开全部
这是按题目要求写的,有任何问题追问
#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内存,如果数据未全部出栈,会把未释放的内存释放
}
展开全部
用了 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 出栈
本回答被提问者和网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
相互信任徐若瑄如u日杜若溪日常太辛苦太开放辛苦费辛苦费覅傅希如续租人族入组u吸热uu导入打扰打扰
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询