建立新节点,代码如下:
linkList newLinkList (void *data, int dataType)
{
linkList link = (linkList*)malloc(sizeof(*link));
link->data = data;
link->dataType = dataType;
link->next = NULL;
return link;
}
在已有链表的表头进行插入节点操作,代码如下:
void insertFirst(linkList h, void *data, int dataType)
{
linkList l = newLinkList(data, dataType);
l->next = h->next;
h->next = l;
}
输出链表中数据到控制台,代码如下:
void linkListOutput(linkList h)
{
linkList p = h;
p = p->next;
while(p != NULL)
{
switch(p->dataType)
{
case 0:
{
printf("%4d", *(int*)(p->data));
break;
}
case 1:
{
printf("%4f", *(double*)(p->data));
break;
}
case 2:
{
printf("%4c", *(char*)(p->data));
break;
}
case 3:
{
printf("%s ", (char*)(p->data));
break;
}
}
p = p->next;
}
printf("/n");
}
小结
通过上面这个链表的小例子,大家可能已经看到了 C 语言的灵活性。这段代码虽然短并且功能简单,但是已经实现了多态性。这篇文章的本意并不在于想要告诉大家用 C 实现多态的方法,而多态的含义也无疑是更加广泛的。这篇文章的初衷其实是基于这样一点认识:面向对象是一种程序设计思想,而 C 语言则是一种编程语言。也许它并不是专门为了面向对象编程而设计,但是这绝不意味着它不能实现面向对象的程序设计。当然以上所展示的这几个操作,如果是用别的编程语言,可能只要寥寥几行就可以完成,但是 C 语言想告诉我们的是:也许我不擅长,但是并不意味着我做不到。
编辑特别推荐:
printf的实现原理
考试大教育全国计算机等级考试在线测试平台
全国计算机等级考试论坛
2010年9月全国计算机等级考试各科模拟试题冲刺