单向链表删除节点
来源:互联网 发布:软件著作权转让流程 编辑:程序博客网 时间:2024/05/21 03:25
#include <iostream>#include <iomanip>#include <ctime>#include <cstdlib> //使用随机数的头文件using namespace std;class list{public: int num,score;char name[10];class list *next;};list del_ptr(list *head,list *ptr);int main(){ list *ptr;int findword=0,find,data[12][2];char namedata[12][10]={{"Allen"},{"Moko"}, {"Lean"},{"Melissa"},{"Angel"},{"Sabrina"}, {"Joyce"},{"Jasica"},{"Hanson"},{"Amy"}, {"Bob"},{"Jack"}};srand((unsigned)time(NULL));//以时间为随机数的种子cout<<"座号 成绩 座号 成绩 座号 成绩 座号 成绩"<<endl;cout<<"=============================================="<<endl;for(int i=0;i<12;i++){ data[i][0]=i+1;data[i][1]=rand()%50+51;}for(int i=0;i<3;i++){ for (int j=0;j<4;j++)cout<<"["<<data[j*3+i][0]<<"] ["<<data[j*3+i][1]<<"] ";cout<<endl;}list *head=new list;//建立链表头指针 if(!head){ cout<<"Error!! 内存分配失败!!"<<endl;exit(1);}head->num=data[0][0];for (int j=0;j<10;j++)head->name[j]=namedata[0][j];head->score=data[0][1];head->next=NULL;ptr=head;for(int i=1;i<12;i++) { list *newnode=new list;//建立链表 newnode->num=data[i][0];for (int j=0;j<10;j++)newnode->name[j]=namedata[i][j];newnode->score=data[i][1];newnode->next=NULL;ptr->next=newnode;ptr=ptr->next;}while(1){ cout<<"请输入要删除的成绩,结束输入-1:";cin>>findword;if(findword==-1)//循环中断条件break;else{ ptr=head;find=0;while (ptr!=NULL){ if(ptr->score==findword) { *ptr=del_ptr(head,ptr);//删除数据 find++;}ptr=ptr->next;}if(find==0)cout<<"######没有找到######"<<endl;}}ptr=head;cout<<"\n\t座号\t 姓名\t成绩"<<endl; //输出剩余链表中的数据cout<<"\t=============================="<<endl;while(ptr!=NULL){ cout<<"\t["<<ptr->num<<"]\t["<<setw(10)<<ptr->name <<"]\t["<<ptr->score<<"]"<<endl;ptr=ptr->next;}system("pause");}list del_ptr(list *head,list *ptr)//删除节点子程序,ptr是想要删除的节点{ list *top; top=head;if(ptr==head)//[情形1]:删除节点在链表头部{ head=head->next;cout<<"已删除第 "<<ptr->num<<" 号学生!!姓名: " <<ptr->name<<endl;}else{ while(top->next!=ptr)//找到删除节点的前一个位置top=top->next;if(ptr->next==NULL) //[情形2]:删除节点在链表尾部{ top->next=NULL; cout<<"已删除第 "<<ptr->num<<" 号学生!!姓名: " <<ptr->name<<endl;}else //[情形3]:删除节点在链表中间的任一节点{ top->next=ptr->next;cout<<"已删除第 "<<ptr->num<<" 号学生!!姓名: " <<ptr->name<<endl;}}delete []ptr; //释放内存空间return *head; //返回链表}
阅读全文
0 0
- 单向链表删除节点
- 单向链表删除节点
- 单向链表删除节点
- 单向链表删除节点
- 删除单向链表的部分节点
- 单向链表的节点删除
- 删除单向链表中的节点
- 删除单向链表中的某一个节点
- C++单向链表之删除节点
- 删除单向链表中的某一个节点
- 实现单向链表节点删除
- 删除单向链表中的某个节点
- 删除单向链表的指定节点
- 单向链表--初始化、添加删除节点、排序链表
- 利用二级指针删除单向链表节点
- 单向链表(二) 删除指定位置的节点
- 删除单向链表倒数第n个节点
- 单向链表在O(1)时间内删除一个节点
- mooncake
- HMM之前向算法
- autorun.inf U盘/光盘自动运行功能 完全操作手册
- 单向链表插入新节点
- ibatis sql语句问题
- 单向链表删除节点
- bzoj2453&2120 维护队列 可修改莫队算法/树套树
- 细谈c++左值的概念
- Mesos&Marathon实现容器部署
- Python之装饰器入门
- 20170920LINK
- 动态链接库dll的静态加载与动态加载
- mysql数据库
- Java300StudyNote(5)-Javassist常用API