c语言数据结构题
用两个链式栈实现入栈出栈操作,如一个链式栈入栈是12345然后出栈,同时把出栈的元素进入另一个栈中,最后把另一个栈中的元素全部输出12345拜托了!...
用两个链式栈实现入栈出栈操作,如一个链式栈入栈是1 2 3 4 5然后出栈,同时把出栈的元素进入另一个栈中,最后把另一个栈中的元素全部输出1 2 3 4 5
拜托了! 展开
拜托了! 展开
3个回答
展开全部
这是按题目要求写的,有任何问题追问
#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内存,如果数据未全部出栈,会把未释放的内存释放
}
光点科技
2023-08-15 广告
2023-08-15 广告
通常情况下,我们会按照结构模型把系统产生的数据分为三种类型:结构化数据、半结构化数据和非结构化数据。结构化数据,即行数据,是存储在数据库里,可以用二维表结构来逻辑表达实现的数据。最常见的就是数字数据和文本数据,它们可以某种标准格式存在于文件...
点击进入详情页
本回答由光点科技提供
展开全部
用了 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导入打扰打扰
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询