数据结构周测错题小结
小题:
1、若函数调用时的实参为变量时,以下关于函数形参和实参的叙述中正确的是()
A.函数的实参和其对应的形参共占同一存储单元
B.形参只是形式上的存在,不占用具体存储单元
C.同名的实参和形参占同一存储单元
D.函数的形参和实参分别占用不同的存储单元
参考答案:D
2、假定一个顺序存储的循环队列的队头和队尾下标分别为front和rear,队列容量为MaxSize ,则判断队满的条件为
(rear+1)%MaxSize == front|||front==(rear+1)%MaxSize
代码题:
1、请编写一个函数strip, 用来删除字符串中的所有空格。例如, 输入apple tree, 则输出为 appletree。字符串从键盘输入。
void strip(char *s)
{
int i,j;
for(i=0;s[i];i++)
{
if(s[i]==' ')
{
for(j=i;s[j];j++)
{
s[j]=s[j+1];
}
}
}
}
int main (void)
{ char s[200];
bzero(s, 200);
printf("input:");
fgets(s, 200, stdin);
strip(s);
printf("%s",s);
}
2、编写一个函数,实现单链表逆序,无需实现单链表的具体细节,函数原型如下:
void reverse_list(single_list *head);
void reverse_list(single_list *head)
{
single_list *p = head->next; //将链表除头节点的节点保存
head->next = NULL;//将链表断开
single_list *tmp = NULL;
while(p != NULL)
{
tmp = p->next;//将后面还未逆序的节点保存
//将p插入到head的后面
p->next = head->next;
head->next = p;
//将tmp的值赋给p
p = tmp;
}
}
3、现在已经有如下接口函数(无需实现以下函数)
struct stack *stack_init(); //初始化栈
void push(struct stack *stack,int num); //压栈
bool pop(struct stack *stack); //出栈
int get_top(struct stack *stack); //获取栈顶元素
bool isEmpty(struct stack *stack); //判断栈是否为空
请你利用以上方法实现将键盘输入的十进制数,转换为十六进制输出
int main(void)
{
struct stack *s = stack_init();
printf("请输入一个十进制数:");
int num;
scanf("%d",&num);
while(num)
{
push(s,num%16);
num /= 16;
}
int data;
char buf[20];
int len = 0;
while(!isEmpty(s))
{
data = get_top(s);
if(!pop(s))
break;
if(data >= 10)
{
buf[len++] = data+55;
}
else
{
buf[len++] = data+48;
}
}
printf("0x%s\n",buf);
}