为了账号安全,请及时绑定邮箱和手机立即绑定

单链表的排序,一直不对,第一个结点执行一直有问题??

单链表的排序,一直不对,第一个结点执行一直有问题??

提力曼 2016-11-05 18:29:19
#include <cstdlib>#include <iostream.h>typedef int ElemType;typedef struct LNode { ElemType data; struct LNode *next; }LinkList; void InitList(LinkList *&L) //构造一个空的线性表L{ L=(LinkList *)malloc(sizeof(LinkList)); L->next=NULL; //L为空}void CreateListR(LinkList *&L,int n)  //选择个数(n) ,即链表的长度。{ LinkList *s,*r,*p; L=(LinkList *)malloc(sizeof(LinkList)); L->next=NULL; r=L; for(int i=0;i<n;i++) {  s=(LinkList *)malloc(sizeof(LinkList)); //创建新结点 s->data=rand()%100; //随机产生一组数据(0-100) r->next=s; r->data=s->data; r=s; } r->next =NULL; p=(LinkList *)malloc(sizeof(LinkList)); s=L->next; /* for(p->data=s->data;p==NULL;s=s->next) { if(s->data>p->data) r->data=s->data; s->data=p->data; p->data=r->data; };*/   //else:(r->data==s->data)或(r->data<s->data) }void show1(LinkList *&L){ LinkList *s; s=L; while(s->next!=NULL) { cout<<s->data<<endl; s=s->next; }}//查找数据元素ebool seek(LinkList *&L,ElemType e){ LinkList *p=L->next,*r=L; cout<<"请输入需要查找的元素"<<endl; cin>>e; while(p!=NULL && p->data <e) { r=p;p=p->next; //后移 } if(p->data==e)  //查找到值为e的数据元素 { cout<<"找到该元素"<<endl; return 1; } else //没有值为e的数据元素 { cout<<"没有找到该元素"<<endl; return 0; cout<<"*****************************"<<endl; }}//数据元素e插入到顺序表L中,使之仍有序。int Insert(LinkList *&L,ElemType e){ LinkList *p=L->next,*r=L ,*s; //p指向第一个节点,L指向头结点,定义指针s cout<<"请输入需要插入的元素e"<<endl; cin>>e; while(p!=NULL && p->data <e) //当第一个点上的不为空,且其值小于e { r=p;p=p->next; //r变为p,p变为下一个结点 } if(p->data>e) //如果p的值大于e s=(LinkList * )malloc(sizeof(LinkList)); //创建新的节点s s->data=e; //s=e s->next=r->next; r->next=s; s->next=p; return 1; { //e大于L中的全部值 s=(LinkList * )malloc(sizeof(LinkList)); s->data=e; s->next=p->next; p->next=s; return 1; } }void show2(LinkList *&L){ LinkList *s; s=L; cout<<"*****************************"<<endl; while(s->next!=NULL) { cout<<s->data<<endl; s=s->next; } }//删除顺序列表中值为e的数据元素int Delete(LinkList * &L,ElemType e ){ LinkList *p=L->next,*r=L; //p指向第一个节点,L指向头结点, cout<<"请输入需要删除的元素e"<<endl; cin>>e; while(p->data!=e && p->data<e) //当p的值不等于e的值,且p的值小于e {  r=p; p=p->next; } if(p->next==NULL) //如果p为尾节点 return 0; else  //p->data==e { r->next=p->next; free(p); //删除P return 1; }}void show3(LinkList *&L){ LinkList *s; s=L; cout<<"*****************************"<<endl; while(s->next!=NULL) { cout<<s->data<<endl; s=s->next; } }//将值为e的数据元素修改为e1int  revise(LinkList * &L,ElemType e,ElemType e1) { LinkList *p=L->next,*r=L; cout<<"请输入需要修改的元素e,和要需要修改后的值e1"<<endl; cin>>e; cin>>e1; while(p->data!=e && p->data<e) {  r=p;p=p->next; } if(p->next==NULL) //如果p为尾节点 return 0; else  //p->data==e { p->data=e1;//把e1的值赋给p return 1; } }void show4(LinkList *&L){ cout<<"*****************************"<<endl; LinkList *s; s=L; while(s->next!=NULL) { cout<<s->data<<endl; s=s->next; } cout<<"*****************************"<<endl;}void main(){ LinkList *L; int e; int e1; CreateListR(L,3); show1(L); seek(L,e);      Insert(L,e); show2(L);    Delete(L,e); show3(L); revise(L,e,e1); show4(L);}/*2. 有序单链表的操作要求:(1) 随机产生一组整数并排序。(2) 主要功能:查找值为e的数据元素。插入值为e的数据元素。(保持仍然有序)删除值为e的数据元素。将值为e的数据元素修改为e1。(保持仍然有序)*/
查看完整描述

目前暂无任何回答

  • 0 回答
  • 0 关注
  • 1672 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号