对链表的相关操作及数据结构的再理解 (三)

2014-11-23 22:04:07 · 作者: · 浏览: 31
ool DeleteNode(PNODE pHead,int pos,int *pVal) { int i=0; PNODE p=pHead,q; while(NULL!=p->pNext&&ipNext; ++i; } if(i>pos-1||NULL==p) return false; q=p->pNext; *pVal=q->data; p->pNext=p->pNext->pNext; free(q); q=NULL; return true; } void SortList(PNODE pHead) { int i,j,t; int len=Length(pHead);//用len来保存链表的长度 PNODE p,q; for(i=0,p=pHead->pNext;ipNext,i++)//比较趟数 { for(j=i+1,q=p->pNext;jpNext,j++)//比较对数 { if(p->data>q->data) { t=p->data; p->data=q->data; q->data=t; } } } } bool QueryNode(PNODE pHead,int pos) { int i=0; PNODE p=pHead,q; while(NULL!=p->pNext&&ipNext; ++i; } if(i>pos-1||NULL==p) return false; q=p->pNext; printf("第%d号位置上结点的值为:%d\n",pos,q->data); return true; } bool ModifyNode(PNODE pHead,int pos,int val) { int i=0; PNODE p=pHead,q; while(NULL!=p->pNext&&ipNext; ++i; } if(i>pos-1||NULL==p) return false; q=p->pNext; q->data=val; printf("修改第%d号位置上结点的值为:%d\n",pos,q->data); return true; }

注意:
1.在vc++中,c编译器不支持bool函数,但c++编译器支持,所以这里我用的是c++编译器。
2.c编译过程中常见错误:illegal use of this type as an expression 是由于 c语言不允许临时定义变量,所有定义的变量都必须放在函数开头,这也是c和c++的重要区别
数据结构的再理解
狭义上的理解:数据结构是专门研究数据存储(包括个体的存储和个体关系的存储)问题。
广义上的理解:数据结构既包含数据的存储也包含数据的操作。算法是对存储数据的操作。
算法:
狭义上的理解:算法和数据的存储方式密切相关
广义上的理解:算法和数据的存储方式无关(这就是泛型的思想)
泛型:利用某种技术达到的效果就是不同的存储方式,执行的操作是一样的。泛型主要通过模板,运算符的重载,指针来实现,在c++中经常用到。
补充
线性结构:
连续存储【数组】
优点:存取速度快
缺点:插入删除元素很慢,空间通常是有限制的,事先必须知道数组的长度,而且需要大块连续内存块
离散存储【链表】
优点:插入删除元素很快,空间没有限制的;
缺点: 存取速度很慢