数据结构要求:
使用栈结构。
问题描述:
任意输入序列为三个整数,请定义堆栈,并合理安排入栈与出栈的函数调用顺序与次数,使得出栈序列为第二个数字,第一个数
字,第三个数字。
格式提醒:
输入格式:输入的三个整数,注意用空格隔开,最后回车。
忙吧航日两士输出三个整数,注意空格隔开,最后一个数字后面也有空格,之后回车。
供参考:
#include<stdio.h>
#include<stdlib.h>
struct Node
{
int data;
struct Node *link;
};
struct Node *top = NULL;
void Push(int n)
{
struct Node *temp = (struct Node*)malloc(sizeof(struct Node));
temp->data = n;
temp->link = top;
top = temp;
}
void Pop(int *n)
{
struct Node* temp;
if(top == NULL) return;
temp = top;
*n = temp->data;
top = top->link;
free(temp);
}
int main(void)
{
int x, i;
scanf("%d", &x);
Push(x);
scanf("%d", &x);
Push(x);
Pop(&i);
printf("%d ", i);
Pop(&i);
printf("%d ", i);
scanf("%d", &x);
Push(x);
Pop(&i);
printf("%d \n", i);
return 0;
}
以下是使用栈结构实现的C++代码:
#include <iostream>
#include <stack>
using namespace std;
int main() {
int a, b, c;
stack<int> s;
cin >> a >> b >> c;
s.push(a);
s.push(b);
s.push(c);
cout << s.top() << " ";
s.pop();
cout << s.top() << " ";
s.pop();
cout << s.top() << " ";
s.pop();
cout << endl;
return 0;
}
输入三个整数后,我们将它们依次压入栈中。然后,我们按照出栈序列的要求,依次弹出栈顶元素并输出。最后记得换行。
公式:s = 1/2(a+b+c);area = √s*(s-a)(s-b)(s-c)
这条代码看似简单,但是对应的公式中存在着好几个“小坑”。
1.第一个需要注意的就是
‘/’整除——取整,假如你的实际运算结果是一个比1小的整数,计算机就会自动给你取0。这里可以强制运算结果转化为,单精度或者双精度浮点型数据。
s = 1/2(a+b+c);area = √s*(s-a)*(s-b)*(s-c);
2.第二个就是这里引用了sqrt求根函数
所以我们需要再一开始就链接math库。
#include<math.h>
3.完整版代码
#include <stdio.h>
#include <math.h>
int main(int argc, const char *argv[])
{
int s,a,b,c;
printf("请输入三角形边长:\n");
scanf("%d%d%d",&a,&b,&c);
if(a+b<c||a+c<b||b+c<a)
{
printf("err\n");
return -1;
}
else if(a<0||b<0||c<0)
{
printf("err\n");
return -1;
}
else
{
s=(double)1/2*(a+b+c);
s=sqrt(s*(s-a)*(s-b)*(s-c));
printf("三角形的面积为:%d\n",s);
}
return 0;
}