当两个int型整数相乘发生溢出时,其结果原来是不是一个正确的值(但4字节无法表示),然后被截断成int型所得的值?还是这两个数在运算时就已经出现溢出错误得到某一个值?是不是两个相同类型的数据相乘后的值默认也是同类型的?如果发生溢出,是不是可以在最后得到的“错误”结果前做一次强制类型转换到更宽位从而得到正确结果,还是需要把相同类型的两个数据都强制转换为更宽位从而得到正确结果?
想多了,直接溢出,不存在什么扩容
实现代码:
#include<bits/stdc++.h>
#include<conio.h>
#define TRUE 1
#define FALSE 0
#define QelemType int
typedef struct Node
{
QelemType data;
struct Node *next;
} Node,*LinkQNode;
typedef struct
{
LinkQNode rear;
} LinkQueue;
void InitLinkQueue(LinkQueue &Q)
{
Q.rear=(LinkQNode)malloc(sizeof(Node));
Q.rear->next=Q.rear;
}
int IsLQEmpty(LinkQueue &Q)
{
if(Q.rear->next==Q.rear)
return TRUE;
else
return FALSE;
}
int EnLinkQueue(LinkQueue &Q,QelemType x)
{
LinkQNode NewNode;
NewNode=(LinkQNode)malloc(sizeof(LinkQNode));
if(NewNode!=NULL)
{
NewNode->data=x;
NewNode->next=Q.rear->next;
Q.rear->next=NewNode;
Q.rear=NewNode;
return TRUE;
}
else
return FALSE;
}
int DeLinkQueue(LinkQueue &Q,QelemType *x)
{
LinkQNode p;
if(Q.rear->next==Q.rear)
return FALSE;
p=Q.rear->next->next;
Q.rear->next->next=p->next;
if(Q.rear==p)
Q.rear=Q.rear->next;
*x=p->data;
free(p);
return TRUE;
}
int main()
{
int t;
char a;
QelemType tt;
LinkQueue Q;
InitLinkQueue(Q);
if(IsLQEmpty(Q))
printf("该队列目前为空!\n");
else
printf("该队列不为空!\n");
printf("输入入队列的元素个数:");
scanf("%d",&t);
for(int i=1; i<=t; i++)
{
QelemType ys;
printf("\n输入第%d个入列元素:",i);
scanf("%d",&ys);
if(EnLinkQueue(Q,ys))
printf("元素%d成功入列!\n",ys);
}
printf("\n输入字母‘e’开始出列\n");
getchar();
while(~scanf("%c",&a))
{
getchar();
if(a!='e')
{
printf("\n输入字母'e'继续出列\n");
continue;
}
if(DeLinkQueue(Q,&tt))
printf("元素%d成功出列\n",tt);
if(IsLQEmpty(Q))
{printf("该队列目前为空!\n");break;}
else
printf("该队列不为空!\n");
printf("\n输入字母'e'继续出列\n");
}
return 0;
}