用顺序表和链表初始化,创建,定位,插入和删除,来个大神帮帮我啊 5C

顺序表:
用顺序表实现下面功能:
1,顺序表的初始化,创建,结构体中饱含元素--学号,姓名,创建完毕后打印输出
1顺序表的定位,通过学号定位姓名,输出学号信息输出姓名,
3顺序表的插入和删除(插入删除后输出剩余表中学生信息并打印输出
打印格式如下
总共有XXX个学生:
--------第N个学生——————
学号:xxx
姓名:xxx
————地N-1个学生——————
学号:XXX
姓名:xxx
链表:

用链表实现下面功能:
1,链表的初始化,创建,结构体中饱含元素--学号,姓名,创建完毕后打印输出
链表的定位,通过学号定位姓名,输出学号信息输出姓名,
3链表的插入和删除(插入删除后输出剩余表中学生信息并打印输出

1个回答

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
静态链表的读取顺序是除了第一个元素外,都按游标对应的数组序号读取吗?求大神

初学数据结构,对静态链表的插入和读取很疑惑,游标是不是就相当于动态链表结点中的指针域,第一个元素就相当于头结点?求高人赐教

单链表的创建及操作(代码已给出)

代码如下,只是自己不知道输入的顺序,有点蒙,希望大神给出运行截图,最好有点解释,谢谢![图片说明](http://forum.csdn.net/PointForum/ui/scripts/csdn/Plugin/001/face/66.gif) #include <iostream> #include<iomanip> using namespace std; struct student//定义结构体变量; { long int num; double score; student *next; }; student *creatlink()//创建链表节点 { student *p1,*p2,*p3,*head=NULL;//初始化头指针; p1=new student;//动态申请内存, cin>>p1->num>>p1->score;//输入结构体中的内容(为了好以0 0结束创建节点) if(p1->num!=0&&p1->score!=0) { head=p1; while(p1->num!=0&&p1->score!=0)//判断是不是0 0; { p2=new student;//再次申请内存。 p1->next=p2; p3=p1; cin>>p2->num>>p2->score;//输入数据 p1=p2; } p3->next=NULL;//尾指针置空。 } else head=NULL; return head; } student *dellink(student *head,long m) { student *p=head,*p1; while(p!=NULL) { if((p->num==m)&&(p==head))//如果要删除的节点在头上。 { head=p->next; break; } else if((p->num==m)&&(p->next==NULL))//删除的节点在结尾 { p=NULL; } else { if(p->num!=m)//要删的节点在中间时判断是否是要删的节点 { p1=p; p=p->next; } else { p1->next=p->next; break; } } } return head; } student *insertlink(student *head,student *stu) { student *p,*p1,*p3,*p2; p=head; p2=new student;//申请动态内存,为了将新的节点地址变化(如果不变第二次插入式会出错) //cout<<p2<<endl; p2->num=stu->num;//赋值,(也可以用结构体直接赋值) p2->score=stu->score; p2->next=stu->next; p1=p2; if(head==NULL)//判断链表是否为空 { head=p1; p1->next=NULL; } else { while(p->next->next!=NULL) { if((p->num<=p1->num)&&(p->next->num>=p1->num))//判断是否是要插入的位置(此处要求输入是按升序输入的,插入时按升序插入) { p3=p->next; p->next=p1; p1->next=p3; break; } p=p->next; } //cout<<p->next->next<<endl; if((p->num<=p1->num)&&(p->next->num>=p1->num))//由于判断结束的标志是p->next->next,所以还有两组数据还没比较。 { p3=p->next; p->next=p1; p1->next=p3; } else if(p->next->num<=p1->num) { p->next->next=p1; p1->next=NULL; } } return head; } void printlink(student *head) { student *p=head; while(p->next!=NULL) { cout<<p->num<<" "<<p->score<<endl; p=p->next; } cout<<p->num<<" "<<p->score<<endl; } void freelink(student *head) { student *p=head,*p1; while(p!=NULL) { p1=p->next;//存储下一个指针的内容 delete(p);//释放p的内存 p=p1; } delete(p); } int main() { student *creatlink(void); student *dellink(student *,long); student *insertlink(student *,student *); void printlink(student *); void freelink(student *); student *head,stu; long del_num; head=creatlink(); cin>>del_num; head=dellink(head,del_num); cin>>stu.num>>stu.score; head=insertlink(head,&stu); cin>>stu.num>>stu.score; head=insertlink(head,&stu); cout<<setiosflags(ios::fixed); cout<<setprecision(2); printlink(head); freelink(head); return 0; }

python单链表问题,有个问题怎么改?

代码如下 class Node(object): #首先创建一个单链表,需要value域,和一个next指针域 def __init__(self,value=None,next=None): self.value,self.next = value,next class LinkList(object): #创建链表 def __init__(self,maxsize=None): #,该函数是初始化这个链表,让maxsize=None,意思是这个链表可以无限长 self.maxsize=maxsize self.root=Node() #根结点只是起到入口的作用,不能存放东西,所以让它为空结点 self.length=0 self.tailnode=None def __len__(self): #返回长度 return self.length def append(self,value): #添加结点(尾插法) if self.maxsize is not None and len(self)>self.maxsize: #判断是否超限,如果超限则抛出一个异常 raise Exception('Full') node = Node(value) tailnode= self.tailnode if tailnode is None: self.root.next=node else: tailnode.next=node self.tailnode=node self.length+=1 def appendleft(self,value): #添加结点(头插法) headnode=self.root.next node=Node(value) self.root.next=node node.next=headnode self.length+=1 def iter_node(self): #遍历整个链表 curnode = self.root.next while curnode is not self.tailnode: yield curnode curnode = curnode.next yield curnode def __iter__(self): #遍历并输出 for node in self.iter_node(): yield node.value def remove(self,value): #O(n) 因为不能像顺序结构直接通过下标来访问结点,所以时间复杂度是n prevnode =self.root #负责记住前一个结点 curnode=self.root.next for curnode in self.iter_node(): if curnode.value==value: prevnode.next=curnode.next del curnode self.length-=1 return 1 else: prevnode=curnode return -1 def find(self,value): #O(n) 寻找链表中某一个元素的位置,若没有该元素,则返回-1 index=0 for node in self.iter_node(): if node.value==value: return index index+=1 return -1 def popleft(self): #O(1),弹出第一个元素 if self.root.next is None: raise Exception('pop from empty Linklist') headnode = self.root.next value=headnode.value self.length-=1 del headnode return value def clear(self):#清除整个链表 for node in self.iter_node(): del node self.root.next=None self.length=0 if __name__ == '__main__': ll=LinkList() ll.append(0) ll.append(1) ll.append(2) assert len(ll)==3 assert ll.find(2)==2 assert ll.find(3)==-1 ll.remove(0) assert len(ll)==2 assert ll.find(0)==-1 assert list(ll)==[1,2] ll.appendleft(0) assert list(ll)==[0,1,2] assert len(ll)==3 handvalue=ll.popleft() assert handvalue==0 assert len(ll)==2 print(list(ll)) ll.clear() assert len(ll)==0 我想用popleft删除第一个元素,代码执行到print(list(ll)),却输出[0,1,2],有没有大神帮忙看一下

单链表的创建及其他操作

这是一段代码,但是自己不会运行(搞不清输入顺序,希望大神给个代码运行截图,最好解释一下,谢谢了) #include <iostream> #include<iomanip> using namespace std; struct student//定义结构体变量; { long int num; double score; student *next; }; student *creatlink()//创建链表节点 { student *p1,*p2,*p3,*head=NULL;//初始化头指针; p1=new student;//动态申请内存, cin>>p1->num>>p1->score;//输入结构体中的内容(为了好以0 0结束创建节点) if(p1->num!=0&&p1->score!=0) { head=p1; while(p1->num!=0&&p1->score!=0)//判断是不是0 0; { p2=new student;//再次申请内存。 p1->next=p2; p3=p1; cin>>p2->num>>p2->score;//输入数据 p1=p2; } p3->next=NULL;//尾指针置空。 } else head=NULL; return head; } student *dellink(student *head,long m) { student *p=head,*p1; while(p!=NULL) { if((p->num==m)&&(p==head))//如果要删除的节点在头上。 { head=p->next; break; } else if((p->num==m)&&(p->next==NULL))//删除的节点在结尾 { p=NULL; } else { if(p->num!=m)//要删的节点在中间时判断是否是要删的节点 { p1=p; p=p->next; } else { p1->next=p->next; break; } } } return head; } student *insertlink(student *head,student *stu) { student *p,*p1,*p3,*p2; p=head; p2=new student;//申请动态内存,为了将新的节点地址变化(如果不变第二次插入式会出错) //cout<<p2<<endl; p2->num=stu->num;//赋值,(也可以用结构体直接赋值) p2->score=stu->score; p2->next=stu->next; p1=p2; if(head==NULL)//判断链表是否为空 { head=p1; p1->next=NULL; } else { while(p->next->next!=NULL) { if((p->num<=p1->num)&&(p->next->num>=p1->num))//判断是否是要插入的位置(此处要求输入是按升序输入的,插入时按升序插入) { p3=p->next; p->next=p1; p1->next=p3; break; } p=p->next; } //cout<<p->next->next<<endl; if((p->num<=p1->num)&&(p->next->num>=p1->num))//由于判断结束的标志是p->next->next,所以还有两组数据还没比较。 { p3=p->next; p->next=p1; p1->next=p3; } else if(p->next->num<=p1->num) { p->next->next=p1; p1->next=NULL; } } return head; } void printlink(student *head) { student *p=head; while(p->next!=NULL) { cout<<p->num<<" "<<p->score<<endl; p=p->next; } cout<<p->num<<" "<<p->score<<endl; } void freelink(student *head) { student *p=head,*p1; while(p!=NULL) { p1=p->next;//存储下一个指针的内容 delete(p);//释放p的内存 p=p1; } delete(p); } int main() { student *creatlink(void); student *dellink(student *,long); student *insertlink(student *,student *); void printlink(student *); void freelink(student *); student *head,stu; long del_num; head=creatlink(); cin>>del_num; head=dellink(head,del_num); cin>>stu.num>>stu.score; head=insertlink(head,&stu); cin>>stu.num>>stu.score; head=insertlink(head,&stu); cout<<setiosflags(ios::fixed); cout<<setprecision(2); printlink(head); freelink(head); return 0; }

数据结构中的线性表中的指针使用

数据结构 单链表 类型定义: typedef struct lnode { elemtype data; struct lnode *next; }Lnode, *LinkList; int InitList(LinkList *L)//构造一个空的线性表L { 构造一个空的线性表L *L=(LinkList)malloc(sizeof(struct LNode)); if(!*L) /* 存储分配失败 */ exit(OVERFLOW); (*L)->next=NULL; /* 指针域为空 */ return OK; } int ListInsert(LinkList L,int i,ElemType e) //在带头结点的单链线性表L中第i个位置之前插入元素e { int j=0; LinkList p=L,s; while(p&&j<i-1) /* 寻找第i-1个结点 */ { p=p->next; j++; } if(!p||j>i-1) /* i小于1或者大于表长 */ return ERROR; s=(LinkList)malloc(sizeof(struct LNode)); /* 生成新结点 */ s->data=e; /* 插入L中 */ s->next=p->next; p->next=s; return OK; } void main() { LinkList L; ElemType e; int i; int j; i=InitList(&L); for(j=1;j<=10;j++) ListInsert(L,j,j); } 在类型定义中linklist已经是指向节点的指针了,为什么在构造一个空的线性表L的函数int InitList(LinkList *L) 中形参为LinkList *L(即L为指向指针的指针),而不是LinkList L????linklist作为一个指针也可以操作链表的呀!!! 在链表插入函数int ListInsert(LinkList L,int i,ElemType e)中,形参为什么却变成了LinkList L??? 在main函数中定义的是指针变量LinkList L; 为何不定义成Lnode L???? 什么时候该用LinkList *L,什么时候该用LinkList L,什么时候该用Lnode L?????它们的区别是什么????望大神详细回答,感激万分!!!

C++ PAT数据结构基础02-1题 反转单链表

题目大意:反转单链表,给定常数K和单链表L,要求按每K个节点反转单链表,如:L: 1->2->3->4->5->6 K=3,输出:3->2->1->6->5->4,如果K=4,输出:4->3->2->1->5->6. 输入说明:每次输入一个案例,对每个案例,第一行内容是链表第一个节点的地址,节点数N(N<=100,000)(不一定是最终形成的单链表的节点数),常数K(<=N),K是需要反转的子链表的长度,节点的地址是一个5位的非负整数,NULL用-1来代替。 下面输入N行 格式如下: Address Data Next Address代表节点的位置,Data是整型数字,Next是下一个节点的位置。 输出说明:输出反转后的单链表,每个节点占一行,格式和输入的一样。 样例输入: 00100 6 4 00000 4 99999 00100 1 12309 68237 6 -1 33218 3 00000 99999 5 68237 12309 2 33218 样例输出: 00000 4 33218 33218 3 12309 12309 2 00100 00100 1 99999 99999 5 68237 68237 6 -1 我的代码如下: /* PAT数据结构基础习题02-1题 */ #include<iostream> using namespace std; const int Maxn=100001; typedef struct{ int addr; int value; int nextaddr; }Node; //结构数组元素,存储三个元素 typedef struct tagnode{ Node *n; struct tagnode *nextp; }LNode; //链表节点,用于存储下一节点地址,和数组元素地址 int main() { Node nodes[Maxn]; //建立数组来存储输入的信息,排列顺序根据输入的顺序值 int firaddr,num,k; cin>>firaddr>>num>>k; nodes[0].value=num; nodes[0].addr=nodes[0].nextaddr=0; //数组大小为100001,存储从1开始,因而0节点随意赋值 int i,j; Node pnode; for(i=0;i<num;i++) //将输入内容存储到数组中 { cin>>pnode.addr>>pnode.value>>pnode.nextaddr; nodes[pnode.value]=pnode; } // for(i=1;i<=num;i++) // { // cout<<nodes[i].addr<<" "; // cout<<nodes[i].value<<" "; // cout<<nodes[i].nextaddr<<endl; // } LNode *head,*pt; //建立LNode的链表 head->n=&nodes[0]; head->nextp=NULL; //头结点的初始化 pt=head; for(i=0;i<num/k;i++) //根据反转要求,链表节点链到正确数组元素 { for(j=k;j>0;j--) { LNode *pp=new LNode; pp->n=&nodes[i*k+j]; pt->nextp=pp; pt=pt->nextp; delete pp; } } if(i*k<num) //剩下的未达到反转要求的,按顺序链到链表结尾 { for(j=1;i*k+j<=num;j++) { LNode *pp=new LNode; pp->n=&nodes[i*k+j]; pt->nextp=pp; pt=pt->nextp; delete pp; } } pt->nextp=NULL; //将链表结尾节点下一地址置为空 pt=head->nextp; //pt指针移动到头指针的下一节点,开始循环输出 while(pt!=NULL) { cout<<pt->n->addr<<" "<<pt->n->value<<" "<<pt->n->nextaddr<<endl; pt=pt->nextp; } return 0; } 求大神指导啊!!!

求大神帮忙在我的代码(栈,C/C++,简单的四则运算)上修改一下,代码和要求都在楼下!

已经用C语言的栈写出个位数的四则运算,但不知道怎么修改成支持小数和多位数甚至可以sin,log,绝对值等数学运算,就类似于科学计算器,只要求控制台界面简单的输入就好,求大神帮忙在我的基础上修改,谢谢了! #include<stdio.h> #include<stdlib.h> #define newp (inn *)malloc(sizeof(inn)) //定义一个申请栈地址的宏 typedef struct stack { char data;//存入数据类型为字符 struct stack *next;//建立指针 }inn; //建立栈类型 int judge(char x) //比较优先级函数 { if(x=='+'||x=='-') return 0; else if(x=='*'||x=='/') return 1; else if(x=='#'||x=='('||x==')') return -1; } int main() { int flag = 1; while(flag) { printf("尾部不需要添加任何符号即可计算: "); inn *p,*top; //栈指针和栈顶指针 int number[50];//存入数字的数组 int i=0; char c; p = newp;//s开空间,newp为宏定义 p->data='#';//头指针第一个字符为# p->next = NULL;//初始化头指针里的next指针 top = p;//top跟p一起,接着新开的p的next指向top,栈用链表顺序不一样 c = getchar();//之后是读取中缀表达式的部分,用字符一个一个的读 while(c!='\n')//直到读到回车结束 { if(c>='0' && c<='9')//如果输入的是数字,存入数字数组(number) { i++;//加完后i=1 number[i] = c-48;//字符转数字存入数组 } else if(c=='(')//如果是左括号,直接进栈 { p = newp; //s开空间,newp为宏定义 p->data = c;//把左括号字符存入 p->next = top;//指针指向栈顶指针 top = p;//top指向p,到后面读从top往回读直到p->next = NULL } else if(c==')') //如果是右括号,匹配左括号,把两者之间的栈内符号全部弹出 { while(top->data!='(')//首先判断左括号,然后从左括号开始到右括号所有字符弹出 { p = top;//从左括号开始,用于计算完后p的地址释放空间 if(top->data=='+') { number[i-1]=number[i-1]+number[i]; i--; } else if(top->data=='-') { number[i-1]=number[i-1]-number[i]; i--; } else if(top->data=='*') { number[i-1]=number[i-1]*number[i]; i--; } else if(top->data=='/') { number[i-1]=number[i-1]/number[i]; i--; } top = top->next;//遍历链表 free(p);//释放空间 } p = top;//此时p用于指向空间便于下一步释放空间 top = top->next;//top++ free(p); } else //否则就是+-*/了 { int a =judge(c),b = judge(top->data);//比较该符号和栈顶符号优先级 if(a>b) //如果大于直接压进去 { p = newp;//开空间 p->data = c; p->next = top; top = p; } else //否则就把栈顶的符号一直弹出,直到弹到可以压进去(也就是说等于也不能压进去) { while(a<=b) { p = top;//从左括号开始,用于计算完后p的地址释放空间 if(top->data=='+') { number[i-1]=number[i-1]+number[i]; i--; } else if(top->data=='-') { number[i-1]=number[i-1]-number[i]; i--; } else if(top->data=='*') { number[i-1]=number[i-1]*number[i]; i--; } else if(top->data=='/') { number[i-1]=number[i-1]/number[i]; i--; } top = top->next;//遍历链表 free(p);//释放空间 b = judge(top->data); } p = newp;//开空间 p->data = c;//存入字符 p->next = top; top = p; } } c = getchar();//读取下一个字符 } while(top->data!='#')//读完还没有结束,还要把栈内剩余的所有符号挨个弹出 { p = top; if(top->data=='+') { number[i-1] = number[i-1]+number[i]; i--; } else if(top->data=='-') { number[i-1] = number[i-1]-number[i]; i--; } else if(top->data=='*') { number[i-1] = number[i-1]*number[i]; i--; } else if(top->data=='/') { number[i-1]=number[i-1]/number[i]; i--; } top = top->next; free(p); } printf("结果 = %d\n",number[i]); printf("\n是否需要继续输入?输入任何个位数字继续 / 0则退出\n"); scanf("%d",&flag); c = getchar(); } return 0; }

数据结构基础问题 这个链队列为什么不能入队和出队?

程序可以运行,界面如下;反复检查代码似乎都没有问题,为什么出不了结果呢。。恳求大神指教!! [图片说明](https://img-ask.csdn.net/upload/201610/12/1476275788_812251.png) //链队列 #include "stdAfx.h" #include <iostream> using namespace std; typedef int ElemType; extern void Error( char * s ); enum Status{ ERROR, OVERFLOW1, OK }; //链队列的类型定义 typedef struct QNode /* 结点结构 */ { ElemType data; struct QNode *next; } QNode,*QueuePtr; typedef struct /* 队列的链表结构 */ { QueuePtr front,rear; /* 队头、队尾指针 */ } LinkQueue; ////////////////////////////////算法实现////////////////////////////////// //1.初始化队列 Status InitQueue_L( LinkQueue &Q ) { if( Q.front != NULL) return OVERFLOW1; Q.front = Q.rear ; Q.front->next = NULL; return OK; } //2. 销毁队列 Status DestroyQueue_L( LinkQueue &Q ) { if(Q.front==Q.rear) return ERROR; delete Q.front ; Q.front =Q.rear =NULL; return OK; } //3. 入队:把x插入队尾 Status EnQueue_L( LinkQueue &Q , ElemType x ) { QNode*p = new QNode; if(p!=NULL) return OVERFLOW1; p->data = x; p->next =NULL; Q.rear->next = p; Q.rear = p; return OK; } //4. 从出队: 如果队空,返回false;否则返回队头元素到x Status DeQueue_L( LinkQueue &Q , ElemType &x ) { QNode*p = new QNode; if(Q.front==Q.rear) return ERROR; p=Q.front->next; Q.front->next=p->next; if(Q.front->next==NULL) { Q.rear=Q.front; } x = p->data; delete p; return OK; } int main(int argc, char* argv[]) { //测试链队列 LinkQueue queue; cout<<"测试链队列"<<endl; InitQueue_L( queue );//初始化队列 for ( int i = 0 ; i < 100 ; i ++ ) { EnQueue_L( queue , i );//入入队的顺序为0,1,2,3,...,99(自行添加出错处理) } cout<<"队列的测试"<<endl; while ( DeQueue_L( queue , i ) == OK )//出队,输出出队的元素 { cout<< i <<" "; } cout<<endl; DestroyQueue_L( queue );//销毁队列 cout<<"退出main函数"<<endl; system("pause"); return 0; }

C语言中random和time函数的问题

color=#FFFF00][color=#FFCC00]C语言中的一个数据查找的实验 程序可以编译通过,但是连接的时候就会出bug,小白表示不知道怎么改了,请大神赐教 附连接时代码:[/color] --------------------Configuration: schtb - Win32 Debug-------------------- Linking... schtb.obj : error LNK2001: unresolved external symbol "int __cdecl random(int)" (?random@@YAHH@Z) schtb.obj : error LNK2001: unresolved external symbol "int __cdecl random(int)" (?random@@YAHH@Z) schtb.obj : error LNK2001: unresolved external symbol "int __cdecl random(int)" (?random@@YAHH@Z) nafxcwd.lib(thrdcore.obj) : error LNK2001: unresolved external symbol __endthreadex nafxcwd.lib(thrdcore.obj) : error LNK2001: unresolved external symbol __beginthreadex Debug/schtb.exe : fatal error LNK1120: 3 unresolved externals 执行 link.exe 时出错. schtb.cpp中的代码 #include <stdio.h> #include <stdlib.h> #include <afxinet.h> #include "schtb.h" //创建查找表操作 void CreatSchTb(SeqList R) { int i ; int random(int sum); //randomize() ; srand(n) ; //以相同的种子值,初始化随机数发生器 for(i=1; i<=n; i++) R[i].key = random(n*10) ;//产生随机数 } //排序查找表,采用简单选择排序 void SortSchTb(SeqList R) { int i, j, k ; for(i=1; i<n; i++) { k = i ; for(j=i+1; j<=n; j++) if (R[k].key>R[j].key) k = j ; if (k!=i) { R[0] = R[i] ; R[i] = R[k] ; R[k] = R[0] ; } } } //顺序查找操作 int SeqSearch(SeqList R, KeyType K) { int i ; R[0].key = K ; for(i=n; R[i].key!=K; i--) ; return i ; } //折半查找操作 int BinSearch(SeqList R, KeyType K) { int low = 1, high = n, mid ; while(low <= high) { mid= (low + high) / 2 ; if (R[mid].key < K) low = mid + 1 ; else if (R[mid].key == K) return mid ; else high = mid - 1 ; } return 0 ; } //输出查找表数据 void PrtSchTb(SeqList R) { int i ; for (i=1; i<=n; i++) printf("%4d", R[i].key) ; printf("\n") ; } //二叉排序树的插入操作 void InsertBST(BSTree *BT, KeyType key) { BSTNode *f, *p = *BT ;//f指向要插入的双亲结点 while(p) { if (p->key == key) return ; //有相同关键字,不插入 f = p ; p = (key<p->key) ? p->lchild : p->rchild ; } p = (BSTNode *)malloc(sizeof(BSTNode)) ; p->key = key ; p->lchild = p->rchild = NULL ; if (*BT == NULL) *BT = p ; //如果二叉排序树为空,则为根结点 else if (key<f->key) f->lchild = p ; else f->rchild = p ; } //创建二叉排序树操作 void CreatBST(BSTree *TP) { int random(int sum); int i ; *TP = NULL ; srand(n) ; for (i=1; i<=n; i++) InsertBST(TP, random(n*10)) ; } //二叉排序树的查找操作 BSTNode *SearchBST(BSTree BT, KeyType key ) { if (BT==NULL||BT->key==key) return BT ; if (BT->key>key) return SearchBST(BT->lchild, key) ; else return SearchBST(BT->rchild, key) ; } //输出二叉排序树结点的值操作,以中序遍历输出 void PrtBST(BSTree BT) { if (BT) { PrtBST(BT->lchild) ; printf("%4d", BT->key) ; PrtBST(BT->rchild) ; } } //取得当前系统时间操作 double GetTime(void) { double T; CTime t = CTime::GetCurrentTime(); int h=t.GetHour(); //获取当前为几时 int mm=t.GetMinute(); //获取当前分钟 int s=t.GetSecond(); //获取当前秒 int w=t.GetDayOfWeek(); //获取星期几,注意1为星期天,7为星期六 double hund=s/100; //struct time; //struct t; //gettime(&t); T = ((h*60+mm)*60+s)*100+hund ; return 0 ; } //主程序 void main(void) { SeqList SR, BR ; BSTree BT ; KeyType k[m] ; int i ; double t1, t2 ; int random(int sum); //randomize() ; 该用法在VC环境下不能使用,需要使用下面的用法 srand(time(0)); //产生待查找的数据 for(i=0; i<m; i++) k[i] = random(n*10) ; //顺序查找算法 printf("顺序查找算法的时间为:\n") ; CreatSchTb(SR) ; t1 = GetTime() ; for(i=0; i<m; i++) SeqSearch(SR, k[i]) ; t2 = GetTime() ; printf("%d毫秒\n", (int)(t2-t1)) ; //折半查找算法 printf("顺序查找算法的时间为:\n") ; CreatSchTb(BR) ; SortSchTb(BR) ; t1 = GetTime() ; for(i=0; i<m; i++) BinSearch(BR, k[i]) ; t2 = GetTime() ; printf("%d毫秒\n", (int)(t2-t1)) ; //二叉排序树查找算法 printf("二叉排序树查找算法的时间为:\n") ; CreatBST(&BT) ; t1 = GetTime() ; for(i=0; i<m; i++) SearchBST(BT, k[i]) ; t2 = GetTime() ; printf("%d毫秒\n", (int)(t2-t1)) ; //PrtBST(BT) ; } schtb.h中的代码 //以下是schtb.h的头文件内容。 //以下用于顺序查找和折半查找 #define n 1000 //定义查找表长度 #define m 500 //定义待查找数据个数 typedef int KeyType ; //定义关键字类型 typedef struct node { //定义查找结点结构 KeyType key ; //如果查找表的结点包含其它信息,在此加入 //InfoType otherinfo ; } NodeType ; typedef NodeType SeqList[n+1] ;//定义查找表,含有监视哨 //以下用于二叉排序树的查找 typedef struct treenode { //定义二叉排序树结点 KeyType key ; //InfoType otherinfo ; //结点的其它信息 //二叉链表结点的左右孩子指针 struct treenode *lchild, *rchild ; } BSTNode ; typedef BSTNode *BSTree ; //定义二叉排序树

大学四年自学走来,这些私藏的实用工具/学习网站我贡献出来了

大学四年,看课本是不可能一直看课本的了,对于学习,特别是自学,善于搜索网上的一些资源来辅助,还是非常有必要的,下面我就把这几年私藏的各种资源,网站贡献出来给你们。主要有:电子书搜索、实用工具、在线视频学习网站、非视频学习网站、软件下载、面试/求职必备网站。 注意:文中提到的所有资源,文末我都给你整理好了,你们只管拿去,如果觉得不错,转发、分享就是最大的支持了。 一、电子书搜索 对于大部分程序员...

在中国程序员是青春饭吗?

今年,我也32了 ,为了不给大家误导,咨询了猎头、圈内好友,以及年过35岁的几位老程序员……舍了老脸去揭人家伤疤……希望能给大家以帮助,记得帮我点赞哦。 目录: 你以为的人生 一次又一次的伤害 猎头界的真相 如何应对互联网行业的「中年危机」 一、你以为的人生 刚入行时,拿着傲人的工资,想着好好干,以为我们的人生是这样的: 等真到了那一天,你会发现,你的人生很可能是这样的: ...

Java基础知识面试题(2020最新版)

文章目录Java概述何为编程什么是Javajdk1.5之后的三大版本JVM、JRE和JDK的关系什么是跨平台性?原理是什么Java语言有哪些特点什么是字节码?采用字节码的最大好处是什么什么是Java程序的主类?应用程序和小程序的主类有何不同?Java应用程序与小程序之间有那些差别?Java和C++的区别Oracle JDK 和 OpenJDK 的对比基础语法数据类型Java有哪些数据类型switc...

我以为我学懂了数据结构,直到看了这个导图才发现,我错了

数据结构与算法思维导图

技术大佬:我去,你写的 switch 语句也太老土了吧

昨天早上通过远程的方式 review 了两名新来同事的代码,大部分代码都写得很漂亮,严谨的同时注释也很到位,这令我非常满意。但当我看到他们当中有一个人写的 switch 语句时,还是忍不住破口大骂:“我擦,小王,你丫写的 switch 语句也太老土了吧!” 来看看小王写的代码吧,看完不要骂我装逼啊。 private static String createPlayer(PlayerTypes p...

和黑客斗争的 6 天!

互联网公司工作,很难避免不和黑客们打交道,我呆过的两家互联网公司,几乎每月每天每分钟都有黑客在公司网站上扫描。有的是寻找 Sql 注入的缺口,有的是寻找线上服务器可能存在的漏洞,大部分都...

Linux 会成为主流桌面操作系统吗?

整理 |屠敏出品 | CSDN(ID:CSDNnews)2020 年 1 月 14 日,微软正式停止了 Windows 7 系统的扩展支持,这意味着服役十年的 Windows 7,属于...

讲一个程序员如何副业月赚三万的真实故事

loonggg读完需要3分钟速读仅需 1 分钟大家好,我是你们的校长。我之前讲过,这年头,只要肯动脑,肯行动,程序员凭借自己的技术,赚钱的方式还是有很多种的。仅仅靠在公司出卖自己的劳动时...

学习总结之HTML5剑指前端(建议收藏,图文并茂)

前言学习《HTML5与CSS3权威指南》这本书很不错,学完之后我颇有感触,觉得web的世界开明了许多。这本书是需要有一定基础的web前端开发工程师。这本书主要学习HTML5和css3,看...

女程序员,为什么比男程序员少???

昨天看到一档综艺节目,讨论了两个话题:(1)中国学生的数学成绩,平均下来看,会比国外好?为什么?(2)男生的数学成绩,平均下来看,会比女生好?为什么?同时,我又联想到了一个技术圈经常讨...

搜狗输入法也在挑战国人的智商!

故事总是一个接着一个到来...上周写完《鲁大师已经彻底沦为一款垃圾流氓软件!》这篇文章之后,鲁大师的市场工作人员就找到了我,希望把这篇文章删除掉。经过一番沟通我先把这篇文章从公号中删除了...

副业收入是我做程序媛的3倍,工作外的B面人生是怎样的?

提到“程序员”,多数人脑海里首先想到的大约是:为人木讷、薪水超高、工作枯燥…… 然而,当离开工作岗位,撕去层层标签,脱下“程序员”这身外套,有的人生动又有趣,马上展现出了完全不同的A/B面人生! 不论是简单的爱好,还是正经的副业,他们都干得同样出色。偶尔,还能和程序员的特质结合,产生奇妙的“化学反应”。 @Charlotte:平日素颜示人,周末美妆博主 大家都以为程序媛也个个不修边幅,但我们也许...

MySQL数据库面试题(2020最新版)

文章目录数据库基础知识为什么要使用数据库什么是SQL?什么是MySQL?数据库三大范式是什么mysql有关权限的表都有哪几个MySQL的binlog有有几种录入格式?分别有什么区别?数据类型mysql有哪些数据类型引擎MySQL存储引擎MyISAM与InnoDB区别MyISAM索引与InnoDB索引的区别?InnoDB引擎的4大特性存储引擎选择索引什么是索引?索引有哪些优缺点?索引使用场景(重点)...

新一代神器STM32CubeMonitor介绍、下载、安装和使用教程

关注、星标公众号,不错过精彩内容作者:黄工公众号:strongerHuang最近ST官网悄悄新上线了一款比较强大的工具:STM32CubeMonitor V1.0.0。经过我研究和使用之...

记一次腾讯面试,我挂在了最熟悉不过的队列上……

腾讯后台面试,面试官问:如何自己实现队列?

如果你是老板,你会不会踢了这样的员工?

有个好朋友ZS,是技术总监,昨天问我:“有一个老下属,跟了我很多年,做事勤勤恳恳,主动性也很好。但随着公司的发展,他的进步速度,跟不上团队的步伐了,有点...

我入职阿里后,才知道原来简历这么写

私下里,有不少读者问我:“二哥,如何才能写出一份专业的技术简历呢?我总感觉自己写的简历太烂了,所以投了无数份,都石沉大海了。”说实话,我自己好多年没有写过简历了,但我认识的一个同行,他在阿里,给我说了一些他当年写简历的方法论,我感觉太牛逼了,实在是忍不住,就分享了出来,希望能够帮助到你。 01、简历的本质 作为简历的撰写者,你必须要搞清楚一点,简历的本质是什么,它就是为了来销售你的价值主张的。往深...

冒泡排序动画(基于python pygame实现)

本项目效果初始截图如下 动画见本人b站投稿:https://www.bilibili.com/video/av95491382 本项目对应github地址:https://github.com/BigShuang python版本:3.6,pygame版本:1.9.3。(python版本一致应该就没什么问题) 样例gif如下 ======================= 大爽歌作,mad

Redis核心原理与应用实践

Redis核心原理与应用实践 在很多场景下都会使用Redis,但是到了深层次的时候就了解的不是那么深刻,以至于在面试的时候经常会遇到卡壳的现象,学习知识要做到系统和深入,不要把Redis想象的过于复杂,和Mysql一样,是个读取数据的软件。 有一个理解是Redis是key value缓存服务器,更多的优点在于对value的操作更加丰富。 安装 yum install redis #yum安装 b...

现代的 “Hello, World”,可不仅仅是几行代码而已

作者 |Charles R. Martin译者 | 弯月,责编 | 夕颜头图 |付费下载自视觉中国出品 | CSDN(ID:CSDNnews)新手...

带了6个月的徒弟当了面试官,而身为高级工程师的我天天修Bug......

即将毕业的应届毕业生一枚,现在只拿到了两家offer,但最近听到一些消息,其中一个offer,我这个组据说客户很少,很有可能整组被裁掉。 想问大家: 如果我刚入职这个组就被裁了怎么办呢? 大家都是什么时候知道自己要被裁了的? 面试软技能指导: BQ/Project/Resume 试听内容: 除了刷题,还有哪些技能是拿到offer不可或缺的要素 如何提升面试软实力:简历, 行为面试,沟通能...

!大部分程序员只会写3年代码

如果世界上都是这种不思进取的软件公司,那别说大部分程序员只会写 3 年代码,恐怕就没有程序员这种职业。

离职半年了,老东家又发 offer,回不回?

有小伙伴问松哥这个问题,他在上海某公司,在离职了几个月后,前公司的领导联系到他,希望他能够返聘回去,他很纠结要不要回去? 俗话说好马不吃回头草,但是这个小伙伴既然感到纠结了,我觉得至少说明了两个问题:1.曾经的公司还不错;2.现在的日子也不是很如意。否则应该就不会纠结了。 老实说,松哥之前也有过类似的经历,今天就来和小伙伴们聊聊回头草到底吃不吃。 首先一个基本观点,就是离职了也没必要和老东家弄的苦...

2020阿里全球数学大赛:3万名高手、4道题、2天2夜未交卷

阿里巴巴全球数学竞赛( Alibaba Global Mathematics Competition)由马云发起,由中国科学技术协会、阿里巴巴基金会、阿里巴巴达摩院共同举办。大赛不设报名门槛,全世界爱好数学的人都可参与,不论是否出身数学专业、是否投身数学研究。 2020年阿里巴巴达摩院邀请北京大学、剑桥大学、浙江大学等高校的顶尖数学教师组建了出题组。中科院院士、美国艺术与科学院院士、北京国际数学...

为什么你不想学习?只想玩?人是如何一步一步废掉的

不知道是不是只有我这样子,还是你们也有过类似的经历。 上学的时候总有很多光辉历史,学年名列前茅,或者单科目大佬,但是虽然慢慢地长大了,你开始懈怠了,开始废掉了。。。 什么?你说不知道具体的情况是怎么样的? 我来告诉你: 你常常潜意识里或者心理觉得,自己真正的生活或者奋斗还没有开始。总是幻想着自己还拥有大把时间,还有无限的可能,自己还能逆风翻盘,只不是自己还没开始罢了,自己以后肯定会变得特别厉害...

HTTP与HTTPS的区别

面试官问HTTP与HTTPS的区别,我这样回答让他竖起大拇指!

程序员毕业去大公司好还是小公司好?

虽然大公司并不是人人都能进,但我仍建议还未毕业的同学,尽力地通过校招向大公司挤,但凡挤进去,你这一生会容易很多。 大公司哪里好?没能进大公司怎么办?答案都在这里了,记得帮我点赞哦。 目录: 技术氛围 内部晋升与跳槽 啥也没学会,公司倒闭了? 不同的人脉圈,注定会有不同的结果 没能去大厂怎么办? 一、技术氛围 纵观整个程序员技术领域,哪个在行业有所名气的大牛,不是在大厂? 而且众所...

男生更看重女生的身材脸蛋,还是思想?

往往,我们看不进去大段大段的逻辑。深刻的哲理,往往短而精悍,一阵见血。问:产品经理挺漂亮的,有点心动,但不知道合不合得来。男生更看重女生的身材脸蛋,还是...

程序员为什么千万不要瞎努力?

本文作者用对比非常鲜明的两个开发团队的故事,讲解了敏捷开发之道 —— 如果你的团队缺乏统一标准的环境,那么即使勤劳努力,不仅会极其耗时而且成果甚微,使用...

为什么程序员做外包会被瞧不起?

二哥,有个事想询问下您的意见,您觉得应届生值得去外包吗?公司虽然挺大的,中xx,但待遇感觉挺低,马上要报到,挺纠结的。

面试阿里p7,被按在地上摩擦,鬼知道我经历了什么?

面试阿里p7被问到的问题(当时我只知道第一个):@Conditional是做什么的?@Conditional多个条件是什么逻辑关系?条件判断在什么时候执...

终于懂了TCP和UDP协议区别

终于懂了TCP和UDP协议区别

无代码时代来临,程序员如何保住饭碗?

编程语言层出不穷,从最初的机器语言到如今2500种以上的高级语言,程序员们大呼“学到头秃”。程序员一边面临编程语言不断推陈出新,一边面临由于许多代码已存在,程序员编写新应用程序时存在重复“搬砖”的现象。 无代码/低代码编程应运而生。无代码/低代码是一种创建应用的方法,它可以让开发者使用最少的编码知识来快速开发应用程序。开发者通过图形界面中,可视化建模来组装和配置应用程序。这样一来,开发者直...

面试了一个 31 岁程序员,让我有所触动,30岁以上的程序员该何去何从?

最近面试了一个31岁8年经验的程序猿,让我有点感慨,大龄程序猿该何去何从。

大三实习生,字节跳动面经分享,已拿Offer

说实话,自己的算法,我一个不会,太难了吧

程序员垃圾简历长什么样?

已经连续五年参加大厂校招、社招的技术面试工作,简历看的不下于万份 这篇文章会用实例告诉你,什么是差的程序员简历! 疫情快要结束了,各个公司也都开始春招了,作为即将红遍大江南北的新晋UP主,那当然要为小伙伴们做点事(手动狗头)。 就在公众号里公开征简历,义务帮大家看,并一一点评。《启舰:春招在即,义务帮大家看看简历吧》 一石激起千层浪,三天收到两百多封简历。 花光了两个星期的所有空闲时...

计算机编程语言排行榜—TIOBE世界编程语言排行榜(2020年1月份最新版)

深入了解IT/互联网行业及岗位,请参阅通用IT/互联网岗位招聘计划(最新全岗版)。 深入了解职业晋升及学习路线,请参阅最优职业晋升路线和课程学习指南(最新全栈版)。 内容导航: 1、TIOBE排行榜 2、总榜(2020年1月份) 3、本月前三名 4、参考地址 1、TIOBE排行榜 TIOBE排行榜是根据全世界互联网上有经验的程序员、课程和第三方厂商的数量,并使用搜索引擎(如Google

《Oracle Java SE编程自学与面试指南》最佳学习路线图(2020最新版)

01、Java入门(Getting Started);02、集成开发环境(IDE);03、项目结构(Eclipse JavaProject);04、类和对象(Classes and Objects);05:词法结构(Lexical Structure);06:数据类型和变量(Data Type and Variables);07:运算符(Operators);08:控制流程语句(Control Flow Statements);

大牛都会用的IDEA调试技巧!!!

导读 前天面试了一个985高校的实习生,问了他平时用什么开发工具,他想也没想的说IDEA,于是我抛砖引玉的问了一下IDEA的调试用过吧,你说说怎么设置断点...

面试官:你连SSO都不懂,就别来面试了

大厂竟然要考我SSO,卧槽。

立即提问
相关内容推荐