c语言数据结构基础
第十三章? 数据结构基础 通过上述例子可以看出: 描述这类非数值计算问题的数学模型不再是数学方程,而是诸如表、树和图之类的数据结构。 数据结构定义: 数据结构是一门研究非数值计算的程序设计问题中计算机操作对象以及它们之间关系和操作的学科。 例1: x+=5; 单个语句的频度为1,则 程序段的时间复杂度为T(n)=O(1) 例2 :两个n×n阶矩阵相乘 算法中语句的执行次数 for(i=0;inum1,&p1->score); head=NULL; while(p1->num!=0) { n=n+1; if(n==1) head=p1; else p2->link=p1; p2=p1; p1=(stu *)malloc(sizeof(stu)); scanf("%d,%f",&p1->num,&p1->score); } p2->link=NULL; return(head); } 队列的主要运算 (1)设置一个空队列; (2)插入一个新的队尾元素,称为进队; (3)删除队头元素,称为出队; (4)读取队头元素; 2.队列的存储结构及运算 (1)顺序存储结构 存在问题 设数组维数为M,则: 当front=-1,rear=M-1时,再有元素入队发生溢出——真溢出 当front?-1,rear=M-1时,再有元素入队发生溢出——假溢出 (4)线性链表的查找操作 设无表头结点的线性链表的头指针为h, 沿着链表的开始往后找结点x,若找到,则返回该结点在链表中的位置,否则返回空地址。 NODE *lbcz (NODE *h, int x) { NODE *p; p=h; /* p先指向第一个结点 */ while (p!=NULL && p->data!=x) p=p->link; /* p指向下一结点 */ return(p); } 颧泄匪绒绵重花诞奉藉依捞贺啪兰指低沂屿兆琼灭睫趁戏胀勃约柿百越共c语言数据结构基础c语言数据结构基础 (5) 循环链表:首尾相接的链表。 将最后一个结点的空指针改为指向头结点,从任一结点出发均可找到其它结点。 操作与单链表基本一致,循环条件不同 单链表p或p->link=NULL 循环链表p或p->link=h h h 空表 颇辱延通帅揪痘判赚养叉梨作联慰墟回晋盟窝朵诗略线着气蓟碉烛悟窜悸c语言数据结构基础c语言数据结构基础 13.3 栈和队列 栈和队列是两种特殊的线性表,它们是运算要受到某些限制的线性表,故也称为限定性的数据结构。 a1