![](https://csdnimg.cn/release/download_crawler_static/87211979/bg4.jpg)
printf("underflow\n");
if(rear->next= =rear) //队中只有一个结点
rear=NULL;
else
rear->next=rear->next->next; //rear->next 指向的结点为循环链队列的队头结点
}
8.设顺序表 L 是一个递减有序表,试写一算法,将 x 插入其后仍保持 L 的有序性。
.只要从终端结点开始往前找到第一个比 x 大(或相等)的结点数据,在这个位置插入就可以了。算法描述如下:
int InsertDecreaseList( SqList *L, elemtype x )
{ int i;
if ( (*L).len>= maxlen)
{ printf(“overflow");
return(0);
}
for ( i=(*L).len ; i>0 && (*L).elem[ i-1 ] < x ; i--)
(*L).elem[ i ]=(*L).elem[ i-1 ] ; // 比较并移动元素
(*L).elem[ i ] =x;
(*L).len++;
return(1); }
第三章栈与队列
设表达式以字符形式已存入数组 E[n]中,‘#’为表达式的结束符,试写出判断表达式中括号(‘(’和‘)’)是
否配对的算法:EXYX(E); (注:算法中可调用栈操作的基本算法。)
[题目分析]判断表达式中括号是否匹配,可通过栈,简单说是左括号时进栈,右括号时退栈。退栈时,若栈顶元
素是左括号,则新读入的右括号与栈顶左括号就可消去。如此下去,输入表达式结束时,栈为空则正确,否则括号
不匹配。
int EXYX(char E[],int n)
//E[]是有 n 字符的字符数组,存放字符串表达式,以‘#’结束。本算法判断表达式中圆括号是否匹配。
{
char s[30]; //s 是一维数组,容量足够大,用作存放括号的栈。
int top=0; //top 用作栈顶指针。
s[top]= ‘#’; //‘#’先入栈,用于和表达式结束符号‘#’匹配。
int i=0; //字符数组 E 的工作指针。
while(E[i]!= ‘#’) //逐字符处理字符表达式的数组。
switch(E[i])
{case‘(’: s[++top]=‘(’; i++ ; break ;
case‘)’: if(s[top]==‘(’{top--; i++; break;}
else{printf(“括号不配对”);exit(0);}
case‘#’: if(s[top]==‘#’){printf(“括号配对\n”);return (1);}
else {printf(“ 括号不配对\n”);return (0);} //括号不配对
default : i++; //读入其它字符,不作处理。 } }//算法结束。