头指针是什么,输出中泰链表中void printstruct student head请问print里面的是

1,输出中泰链表中void printstruct student head请问print里面的是期待看到有用的回答!struct student *head是这个链表的头指针,要输出链表 , 是必须要头指针作为参数的 同时也是结构体student的指针
2,我用这个函数想改变这个链表的头指针的值怎么改变不了呢因为你修改的是链表的头指针在这个函数中的局部副本 。。。不是位于父函数中的那个真正的头指针 。只有把一个指针传递给头指针,才能把父函数里的头指针修改为指向新头元素 。程序改为如下即可:int Insert(LNode **head){ LNode *newElem; newElem = (LNode*)malloc(sizeof(LNode)); if(!newElem)return 0; newElem->next = *head; *head = newElem; return 1;}【头指针是什么,输出中泰链表中void printstruct student head请问print里面的是】
3,首结点指的是什么它与头结点有何区别头指针是指向链表的第一个结点的指针 表头结点是链表的第一个结点 头结点是在表头结点之前再附设的一个结点 。头结点是头指针指向的结点,首结点是头结点指向的下一个结点 。头结点无数据域,首结点有数据域 。头结点一定是指整个链表前的一个结点,这个结点是没有数据的 , 是用来保存第一个结点(也就是首结点)的地址的,这个结点主要是为了在实现对链表操作时方便一些 。也有的链表是没有头结点的,第一个结点就是有数据的首结点 , 不过这会让有些操作实现起来比较麻烦 。建议使用头结点,不要以为没数据就没用
4 , 指针的作用是什么)指针的操作流程申请并初始化或配置为空:int *pInt=NULL;开辟空间或使其指向对象:pInt=new Int(3);或int i=3;pint=&i;用指针(更确切地说是操作内存,在使用之前加if(pint!=NULL)或assert(pInt!=NULL)后再使用,以防内存申请失败的情况下使用指针): if(p!=NULL) {use pint};释放使用完的内存.free(pInt);置指针为空pInt=NULL;(避免野指针的出现)(3) 在函数的参数传递中,编译器总是要为函数的每个参数制作临时副本,假如参数为p的话,那么编译器会产生p的副本_p,使_p=p; 假如函数体内的程式修指针的作用:1、指针就是指向一个特定内存地址的一个变量 。c语言指针可以有效地表示复杂的数据结构、动态分配内存、高效地使用数组和字符串、使得调用函数时得到多个返回值等 。指针的应用往往与数组联系在一起,是最频繁的,也是最基础的 。在定义数组和函数时,系统都会为其自动分配一个指向其首地址的指针 。对于一个数组 , 其名称就是一个指针变量 。2、指针只是一个变量 , 它存储一个内存地址 。如果传入一个地址,比传入一个struct效率要高,因为少了一个拷贝过程 。3、指针能够有效的表示数据结构 , 能动态分配内存,能较方便的使用字符串,有效的使用数组 。4、指针直接与数据等的储存地址有关,是比较重要的 。比如,值传递不如地址传递高效 , 因为值传递先从实参的地址中提出值,再赋值给形参带入函数计算;而指针则把形参的地址直接指向实参地址,使用时直接提出数据 , 使效率提高 , 特别在频繁赋值等情况下 。5 , 数据结构输出栈内所有元素既然要输出所有元素,return e就有问题因为一旦return,程序就此中止 , while循环失去了意义时间问题,明天把五题补上,或者发到你邮箱里一,1 d数据元素是数据的基本单位, 数据项是不可分割的最小单位 。2 c线性表是由类型相同的数据元素组成的有限序列 。线性表的数据元素可以是最简的数值和字符,也可以是比较复杂的信息 。4 b根据设定的哈希函数和处理冲突的方法将一组关键字映像到一个有限的连续的地址集上 , 并以关键字在地址集中的“象”作为记录在表中的存储位置,这种表便成为哈希表 。哈希函数是一个映像 , 因此哈希函数的设定很灵活,不需进行比较就可以直接取得所查记录 。5 c根据二维数组a[u1][u2]的列优先映射所对应的映射函数 map(i1,i2) = i2 * u1 + i1 其中u1=8 u2=10 ; i1=3 i2=6 ; map=6*8+3=51即4000+51*2=41026 d根据后进先出原则c/d/a/b:c进栈然后出栈;a,b,d先后进栈,d出栈;此时栈中有a,b两个元素 , 必须是b先出栈 , 所以不会出现c/d/a/b序列二,1数据的存储结构(即物理结构) 2、线性表中数据元素的个数n称为线性表的长度 。3 后进先出4、2056;2086 。。u1=10,u2=8;i1=4-1=3,i2=5-1=4 ;行优先:map(i1 , i2) = i1 * u2 + i2=28;列优先:map(i1,i2) = i2 * u1 + i1 =435 一个算法应该具有以下特点: 有穷性 、确定性、有零个或多个输入、有一个或多个输出、有效性6、 n-i+1三 , 1、当要求随机存取线性表的任一元素,且逻辑上相邻的元素在物理位置上也相邻时,要采用顺序结构 。因为线性表的顺序存储结构是用一组地址连续的存储单元依次存储线性表的元素,用元素在存储器中的“物理位置相邻”表示线性表中数据元素之间的逻辑关系,可随机存取任一个数据元素,是一种随机存储结构 。2、当不要求逻辑上相邻的元素在物理位置上也相邻 , 不要求随机存取任一数据元素,但需要进行有效率的插入、删除等操作时,要采用链式存储结构 。(只讨论单链式)因为线性表的链式存储结构中用结点中的指针域表示数据元素之间的逻辑关系 , 这样逻辑上相邻的两个元素部要求物理存储位置也相邻 。且每个元素的存储位置由其直接前驱的指针表示,方便进行插入、删除等操作,是一种非随机存储结构 。四 , 1、 a[1][0] - a[2][0] - a[1][1] - a[2][1] - a[1][2] - a[2][2](自己画框框吧 。。。)2、 。。。。这个就不用了吧 你肯定会的五1、//--------循环队列----队列的顺序存储结构----------#define maxqsize 100//最大队列长度typedef structqelemtype*base;// 初始化的动态分配存储空间intfront;//头指针,若队列不空,指向队列头元素int rear;//尾指针 , 若队列不空,指向队列尾元素的下一个位置} q ;status enqueue (q, x)if (( q.rear +1)%maxqsize = = q.front ) return error; // 队列满q.base[q.rear] = x ;q.rear = (q.rear+1)%maxqsize ;return ok ;}status gettop(q, qelemtype &e)if (q.front = = q.rear)return error ; //队列为空 返回errore = q.base[q.front];q.front = (q.front +1 ) % maxqsize ;return ok;}2、一个带头结点的线性链表类型定义如下:typedef structlnodeelemtypedate ;struct lnode*next ;} *link, *position ;typedef structlink head,tail;//分别指向线性链表中的头结点和最后一个结点intlen ;//指示线性链表中数据元素的个数} linklist ;status excha-l ( linklist &l, int i)for(int i = n; i>=1; i--)insfirst(head,s) ;}// 已知h指向线性链表的头结点,将s所指结点插入在第一个结点之前l[0]*next = tail ;return ok ;}// excha-l3、由于线性表的长度可变 , 在c语言中可用动态分配的一维数组,一般情况下,删除第i((1≤i≤n)个元素)时需将从i+1 至第n(共n-i)个元素依次向前移动一个位置 。如下描述:#define list-size maxlen //线性表存储空间的初始分配量typedef structelemtype*elem ; // 存储空间基址int length ;//当前长度int listsize ;//当前分配的存储容量} stlist ;status listdelete-st (stlist &l, int i ,elemtype &e)// 在顺序线性表l中删除第i个元素,并用e返回其值//i的合法值为1≤i≤listlength-stif ((i<1) || (i> l.length)) return error ; // i值不合法p = & (l.elem[i-1]) ;//p为被删除元素的位置e = *p ;//被删除元素的值赋给eq = l.elem + l.length -1 ;//表尾元素的位置for (++p; p<=q ; ++p)* (p-1) = *p ;//被删除元素之后的元素左移- -l.length ;//表长减1return ok ;}// listdelete - st

    推荐阅读