您的位置:

c语言inte结构,c语言int含义

本文目录一览:

如何用C语言数据结构的格式实现简单的算术表达式求值程序

用栈把中缀表达式(输入的式子)按优先级转为后缀表达式(逆波兰式,即运算符在前,操作数在后),再利用栈变计算边保存结果用于下一步计算,最后算出式子的答案

以下代码输入一个式子(以

=

作为输入结束标志),输出结果,负数如-3用0-3表示,支持高位运算

#include

stdio.h

#include

stdlib.h

#include

math.h

#include

malloc.h

#define

OK

1

#define

ERROR

-1

typedef

char

SElemType;

typedef

char

Status;

#define

STACK_INIT_SIZE

100000

#define

STACKINCREMENT

2

struct

SqStack

{

SElemType

*base;

SElemType

*top;

int

stacksize;

};

struct

SqStack1

{

int

*base;

int

*top;

int

stacksize;

};

SqStack

OPTR;

SqStack1

OPND;

char

Precede(char

c1,char

c2)

{

if(c1=='+'

||

c1=='-')

{

if(c2=='+'

||

c2=='-'

||

c2==')'

||

c2=='=')

return

'';

else

return

'';

}

else

if(c1=='*'

||

c1=='/')

{

if(c2=='(')

return

'';

else

return

'';

}

else

if(c1=='(')

{

if(c2==')')

return

'=';

else

return

'';

}

else

if(c1==')')

return

'';

else

if(c1=='=')

{

if(c2=='=')

return

'=';

else

return

'';

}

else

return

'\0';

}

int

In(char

c)

{

if(c=='+'

||

c=='-'

||

c=='*'

||

c=='/'

||

c=='('

||

c==')'

||

c=='=')

return

1;

else

return

0;

}

int

Operrate(int

m,char

b,int

n)

{

switch(b)

{

case

'+':return

m+n;

case

'-':return

m-n;

case

'*':return

m*n;

case

'/':return

m/n;

}

return

0;

}

//操作数

int

InitStack1(SqStack1

S)

{

S.base=(int

*)malloc(STACK_INIT_SIZE*sizeof(int));

S.top=S.base;

S.stacksize=STACK_INIT_SIZE;

return

OK;

}

int

Push1(SqStack1

S,int

e)

{

if(S.top-S.base=S.stacksize)

{

S.base=(int

*)realloc(S.base,(S.stacksize+STACKINCREMENT)*sizeof(int));

S.top=S.base+S.stacksize;

S.stacksize=S.stacksize+STACKINCREMENT;

}

*S.top++=e;

return

OK;

}

int

Pop1(SqStack1

S,int

e)

{

if(S.top==S.base)

return

ERROR;

e=*

--S.top;

return

OK;

}

int

GetTop1(SqStack1

S)

{

if(S.top==S.base)

return

ERROR;

return

*(S.top-1);

}

//算符

int

InitStack(SqStack

S)

{

S.base=(SElemType

*)malloc(STACK_INIT_SIZE*sizeof(SElemType));

S.top=S.base;

S.stacksize=STACK_INIT_SIZE;

return

OK;

}

int

Push(SqStack

S,SElemType

e)

{

if(S.top-S.base=S.stacksize)

{

S.base=(SElemType

*)realloc(S.base,(S.stacksize+STACKINCREMENT)*sizeof(SElemType));

S.top=S.base+S.stacksize;

S.stacksize=S.stacksize+STACKINCREMENT;

}

*S.top++=e;

return

OK;

}

int

Pop(SqStack

S,SElemType

e)

{

if(S.top==S.base)

return

ERROR;

e=*

--S.top;

return

OK;

}

Status

GetTop(SqStack

S)

{

if(S.top==S.base)

return

ERROR;

return

*(S.top-1);

}

int

Calculate()

{

char

c,theta,p;

int

a,b,i=0,ans,x;

InitStack(OPTR);

Push(OPTR,'=');

InitStack1(OPND);

c=getchar();

while(c!='='

||

GetTop(OPTR)!='=')

{

if(!In(c)

c='0'

c='9')

{

Push1(OPND,c-'0');

c=getchar();

while(c='0'

c='9')

{

Pop1(OPND,x);

Push1(OPND,x*10+c-'0');

c=getchar();

}

}

else

if(In(c))

{

switch(Precede(GetTop(OPTR),c))

{

case

'':

Push(OPTR,c);

c=getchar();

break;

case

'=':

Pop(OPTR,p);

c=getchar();

break;

case

'':

Pop(OPTR,theta);

Pop1(OPND,b);

Pop1(OPND,a);

ans=Operrate(a,theta,b);

Push1(OPND,ans);

break;

}

}

else

{

c=getchar();

}

}

return

GetTop1(OPND);

}

int

main()

{

int

ans;

ans=Calculate();

printf("%d\n",ans);

return

0;

}

关于c语言数据结构 insertlist插入算法

您的sort函数有错误。如果我没有讲明白可以联系我。

void

sort(seqlist

*p,int

i,int

e)//将元素e传入到数组的第i个位序前

{

int

j;

//if(p-n10)

if(p-n10)//判断语句为p-n应该小于10才不会溢出

for(j=p-n;j=i;j--)

{

p-b[j]=p-b[j-1];//将第i个位置以后的元素依次后移

//p-b[i-1]=e;

//p-n=p-n+1;

}

p-b[i-1]=e;//只要在最后插入一次就可以了。

p-n=p-n+1;//p-n=p-n+1只需运行一次。

}

C语言如何实现将IP地址字符串与组成IP地址的4个数字互相转换?

你要知道你平常用的ip地址存入计算机并不是点分形式的,是uint32类型的,当你需要取得这个点分形式的ip地址,你需要调用inte_ntoa,他的参数是in_addr,你要知道in_addr不是一个基本类型,它是一个结构体,里面有个成员,你把他的值设成那个uint32类型的ip,再调用inet_ntoa,算的结果就是点分形式的ip了