下面这个程序是我在教材上遇到的,有一点理解难度的题目,所以称为中级。
#include<stdio.h>
#include<stdlib.h>
struct node{
char data;
struct node *next;
};
struct node a[] = { { 'A', a + 1 }, { 'B', a + 2 }, { 'C', a + 3 }, { 'D', a + 4 }, { 'E', a + 5 }, { ' ', a } };
int main(){
struct node *p = a;
int i, j;
for (i = 0; i < 6; i++){
printf("\n");
for (j = 0; j < 6; j++){
printf("%c", p->data);
p = p->next;
}
p = p->next;
}
system("pause");
return 0;
}
后来我理解了以后,发现这里的难点就是对链表的理解,主要是那个结构体数组a[]。
(1)a[]中,每一个元素都是一个结构体,结构体中第一个值是data(例如:'A'),第二个值是*next(例如:a+1),是指指向下一个的地址;
(2)a+1是指a[]中的第二个结构体元素(‘B’,a+2),a+2是指a[]中第三个结构体元素(‘C’,a+3);
理解了上面的两条,那么这个就不难了,第一次外层for循环中,里面有一个for循环,从a[]第一个元素开始,输出:ABCDE_ 这时再经过p->next以后,p指向'B';
第二次外层for循环中,输出:BCDE_A; ...
看看运行结果: