数据结构课后题

第三章

(1)typedef struct    
{ ElemType v[m];  
  int top[2]
}twostack;
 
int  push(twostack *s,int i, ElemType x)
  /* 两栈共享向量空间,i是0或1,表示两个栈,x是进栈元素,*/
/* 本算法是入栈操作 */
{ if (s->top[1] - s->top[0])==1) return(0);/* 栈满 */
  else {switch (i)
         {case 0: s->v[++(s->top)]=x; break;
          case 1: s->v[--(s->top)]=x; break;
          default: printf(“栈编号输入错误”);return(0);
          }
         return(1);      /* 入栈成功 */
        }
} /* 算法结束 */
 
ElemType pop(twostack *s,int i)
  /* 两栈共享向量空间,i是0或1,表示两个栈,本算法是退栈操作 */
{ ElemType x;
  switch (i)
         {case 0: if (s->top[0]==-1) return(0);/* 栈空 */
x=s->v[(s->top)--];break;
          case 1: if (s->top[1]==m) return(0);/* 栈空 */
x=s->v[(s->top)++];break;
          default: printf(“栈编号输入错误”);return(0);
          }
         return(x);      /* 退栈成功 */     

 
ElemType top (twostack *s,int i)
  /* 两栈共享向量空间,i是0或1,表示两个栈,本算法是取栈顶元素操作 */
{ ElemType x;
switch (i)
   {case 0: if (s->top[0]==-1) return(0);/* 栈空 */
x=s->v[s->top];break;
    case 1: if (s->top[1]==m) return(0);/* 栈空 */
x=s->v[s->top];break;
    default: printf(“栈编号输入错误”);return(0);
   }
   return(x);      /* 取栈顶元素成功 */   
 } 

(4)char EvaluateExpression() 
int EvaluateExpression() 
{//设OPTR,OPND分别为运算符栈和操作栈 
SqStack OPTR,OPND; 
char ch,a,b,x,theta; 
InitStack(OPTR); InitStack(OPND);//初始化 
Push(OPTR,'#');//起始符入栈  
ch=getchar(); 
while(ch!='#'||GetTop(OPTR)!='$')//表达式没有扫描完毕或OPTR栈顶元素不为$
 { if(In(ch)==-1))//是空格
  {tt=0;ch=getchar();} 
  else if(!In(ch)==0)//是数字
   { tt=tt*10+ch-'0'; Push(OPND,tt+'0');// 不是运算符,进OPND栈 
   ch=getchar(); } 
   else 
   {switch(Precede(GetTop(OPTR),ch))//比较OPTR的栈顶元素和ch的优先级
    { 
case '<': 
  Push(OPTR,ch); //压入栈,读取下一个字符
  ch=getchar(); break; 
case '>':
 Pop(OPTR,theta); //弹出栈顶元素 运算符
  Pop(OPND,b);Pop(OPND,a);
   Push(OPND,Operate(a,theta,b));
break; 
case '='://OPTR栈顶元素是'('且ch是')' 
Pop(OPTR,x);//scanf("%c",&ch); 
ch=getchar(); break; 
} } } 
return GetTop(OPND)-'0';

 
(7)typedef struct {ElemType Q[m] ;
 int rear,front; //队尾和队头指针 
 int tag; //标记, 0为空,1为非空
  } CycQueue; //设头 尾指针和标志域的循环队列
void QueueInit (CycQueue cq); //初始化 
{cq.tag=0; cq.rear=cq.front=0; }
void QueueIn (CycQueue cq, ElemType x)      //若队列不满,则将x插入到队尾
{ if(cq.tag==1 && cq.front==cq.rear) 
 { printf("栈满"); exit(0); } 
else {cq.rear=(cq.rear+1) % m; 
 cq.Q[cq.rear]=x;
if (cq.tag==0) cq.tag=1; //由空变不空标记
   } } 
void QueueOut(CycQueue cq);      //若队列非空,则将队头元素出队
{
if (cq.tag==0) 
{ printf("栈空"); exit(0); } 
else {cq.front=(cq.front+1) % m; 
if (cq.front==cq.rear) cq.tag=0; //由不空变队空标记
 } } 
(10) num=0;//最大值 
int max(LinkdList f) 
{ if(f) { t=max(t,f->date);num++; }
return t; }
//节点个数 
 int num(LinkedList f)
  {if(f==NULL) return 0;
   else return num(f->next)+1; }
//平均值 
int aver; sum=0,num=0;
int average(LinkedList f) 
{if (f) 
{sum+=f->data; num++;
average(f->next); } 
return sum/num; } }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值