#include<iostream>
#define OK 1
#define ERROR 0
using namespace std;
typedef int ElemType;
typedef int Status;
typedef struct LNode
{
ElemType data;
struct LNode *next;
}LNode,*LinkList;
Status Initlist(LinkList &L); //初始化
void ShowList(LinkList L); //输出
Status CreateList_H(LinkList &L,int n); //前插法创建单链表
Status CreateList_R(LinkList &L,int n); //后插法创建单链表
Status GetElem(LinkList L,int i,ElemType &e); //取值
LNode *LocateElem(LinkList L,ElemType e); //查找
Status Listlnsert(LinkList &L,int i,ElemType e); //插入
Status ListDelete(LinkList &L,int i); //删除
void SortList(LinkList &L); //排序
LinkList L;
ElemType o,e,i,t,j,n;
LNode *p,*r,*s,*q;
int main() //main
{
while(1)
{
cout<<"*********************************菜单*********************************"<<endl;
cout<<" 1.初始化并创建单链表表 2.取值 3.查找 4.插入 5.删除 6.输出 7.排序 0.退出"<<endl;
cout<<"**********************************************************************"<<endl;
cout<<"请选择操作:(0~7)";
cin>>o;
if(o==1)
{
if(CreateList_R(L,n))
cout<<"创建成功"<<endl;
else
cout<<"创建失败"<<endl;
system("pause");
system("cls");
}
if(o==6)
{
ShowList(L);
system("pause");
system("cls");
}
if(o==3)
{
cout<<"请输入查找的元素:"<<endl;
cin>>e;
cout<<LocateElem(L,e)<<endl;
system("pause");
system("cls");
}
if(o==2)
{
cout<<"请输入要取元素的位置:"<<endl;
cin>>i;
if(GetElem(L,i,e))
cout<<"取出成功"<<endl;
else
cout<<"取出失败"<<endl;
cout<<"您取的元素为:";
cout<<e<<endl;
system("pause");
system("cls");
}
if(o==4)
{
cout<<"请输入要插入的元素:"<<endl;
cin>>e;
cout<<"请输入插入元素的位置:"<<endl;
cin>>i;
if(Listlnsert(L,i,e))
cout<<"插入成功"<<endl;
else
cout<<"插入失败"<<endl;
system("pause");
system("cls");
}
if(o==5)
{
cout<<"请输入删除的元素的位置:"<<endl;
cin>>i;
if(ListDelete(L,i))
cout<<"删除成功"<<endl;
else
cout<<"删除失败"<<endl;
system("pause");
system("cls");
}
if(o==0)
{
cout<<"谢谢使用";
return 0;
system("pause");
system("cls");
}
if(o==7)
{
SortList(L);
cout<<"排序成功:"<<endl;
ShowList(L);
system("pause");
system("cls");
}
}
return 0;
}
Status CreateList_H(LinkList &L,int n) //前插法创建单链表
{
L=new LNode;
L->next=NULL;
cout<<"请输入元素个数:";
cin>>n;
cout<<"请依次输入元素:";
for(i=0;i<n;++i)
{
p=new LNode;
cin>>p->data;
p->next=L->next;
L->next=p;
}
return OK;
}
Status CreateList_R(LinkList &L,int n) //后插法创建单链表
{
L=new LNode;
L->next=NULL;
r=L;
cout<<"请输入元素个数:";
cin>>n;
cout<<"请依次输入元素:";
for(i=0;i<n;++i)
{
p=new LNode;
cin>>p->data;
p->next=NULL;
r->next=p;
r=p;
}
return OK;
}
Status GetElem(LinkList L,int i,ElemType &e) //取值
{
p=L->next;
j=1;
while(p&&j<i)
{
p=p->next;
++j;
}
if(!p||j>i)
return ERROR;
e=p->data;
return OK;
}
LNode *LocateElem(LinkList L,ElemType e) //查找
{
p=L->next;
while(p&&p->data!=e)
p=p->next;
return p;
}
Status Listlnsert(LinkList &L,int i,ElemType e) //插入
{
p=L;
j=0;
while(p&&(j<i-1))
{
p=p->next;
++j;
}
if(!p||j>i-1)
return ERROR;
s=new LNode;
s->data=e;
s->next=p->next;
p->next=s;
return OK;
}
Status ListDelete(LinkList &L,int i) //删除
{
p=L;
j=0;
while((p->next)&&(j<i-1))
{
p=p->next;
++j;
}
if(!(p->next)||(j>i-1))
return ERROR;
q=p->next;
p->next=q->next;
delete q;
return OK;
}
void ShowList(LinkList L) //输出
{
LNode *p=L->next;
while(p)
{
cout<<p->data<<" ";
p=p->next;
}
cout<<endl;
}
void SortList(LinkList &L) //排序
{
ElemType t;
LNode *p,*s,*q;
for(p=L->next;p->next!=NULL;p=p->next)
{
s=q;
p=p->next;
while(q!=NULL)
{
if(s->data>q->data)
s=q;
q=q->next;
}
if(p!=s)
{
t=s->data;
s->data=p->data;
p->data=t;
}
}
}
数据结构 单链表排序出错,其他都正常,用if写的
- 写回答
- 好问题 0 提建议
- 追加酬金
- 关注问题
- 邀请回答
-
3条回答 默认 最新
- 小白小白你好菜 2021-04-02 08:55关注
完整代码如下:(只修改了你的排序函数)
#include<iostream> #define OK 1 #define ERROR 0 using namespace std; typedef int ElemType; typedef int Status; typedef struct LNode { ElemType data; struct LNode *next; }LNode,*LinkList; Status Initlist(LinkList &L); //初始化 void ShowList(LinkList L); //输出 Status CreateList_H(LinkList &L, int n); //前插法创建单链表 Status CreateList_R(LinkList &L, int n); //后插法创建单链表 Status GetElem(LinkList L, int i, ElemType &e); //取值 LNode *LocateElem(LinkList L, ElemType e); //查找 Status Listlnsert(LinkList &L, int i, ElemType e); //插入 Status ListDelete(LinkList &L, int i); //删除 void SortList(LinkList &L); //排序 LinkList L; ElemType o, e, i, t, j, n; LNode *p, *r, *s, *q; int main() //main { while(1) { cout<<"*********************************菜单*********************************" << endl; cout<<" 1.初始化并创建单链表表 2.取值 3.查找 4.插入 5.删除 6.输出 7.排序 0.退出" << endl; cout<<"**********************************************************************" << endl; cout<<"请选择操作:(0~7)"; cin >> o; if(o == 1) { if(CreateList_R(L, n)) cout << "创建成功" << endl; else cout << "创建失败" << endl; system("pause"); system("cls"); } if(o == 6) { ShowList(L); system("pause"); system("cls"); } if(o == 3) { cout << "请输入查找的元素:" << endl; cin >> e; cout << LocateElem(L, e) << endl; system("pause"); system("cls"); } if(o == 2) { cout << "请输入要取元素的位置:" << endl; cin >> i; if(GetElem(L, i, e)) cout << "取出成功" << endl; else cout << "取出失败" << endl; cout << "您取的元素为:"; cout << e << endl; system("pause"); system("cls"); } if(o == 4) { cout << "请输入要插入的元素:" << endl; cin >> e; cout << "请输入插入元素的位置:" << endl; cin >> i; if(Listlnsert(L, i, e)) cout << "插入成功" << endl; else cout << "插入失败" << endl; system("pause"); system("cls"); } if(o == 5) { cout << "请输入删除的元素的位置:" << endl; cin >> i; if(ListDelete(L, i)) cout << "删除成功" << endl; else cout << "删除失败" << endl; system("pause"); system("cls"); } if(o == 0) { cout << "谢谢使用"; return 0; system("pause"); system("cls"); } if(o == 7) { SortList(L); cout<<"排序成功:"<<endl; ShowList(L); system("pause"); system("cls"); } } return 0; } Status CreateList_H(LinkList &L, int n) //前插法创建单链表 { L = new LNode; L->next = NULL; cout << "请输入元素个数:"; cin >> n; cout << "请依次输入元素:"; for(i = 0; i < n; ++i) { p = new LNode; cin >> p->data; p->next = L->next; L->next = p; } return OK; } Status CreateList_R(LinkList &L, int n) //后插法创建单链表 { L = new LNode; L->next = NULL; r = L; cout << "请输入元素个数:"; cin >> n; cout << "请依次输入元素:"; for(i = 0; i < n; ++i) { p = new LNode; cin >> p->data; p->next = NULL; r->next = p; r = p; } return OK; } Status GetElem(LinkList L, int i, ElemType &e) //取值 { p = L->next; j = 1; while(p && j<i) { p = p->next; ++j; } if(!p || j>i) return ERROR; e = p->data; return OK; } LNode *LocateElem(LinkList L, ElemType e) //查找 { p = L->next; while(p && p->data != e) p = p->next; return p; } Status Listlnsert(LinkList &L, int i, ElemType e) //插入 { p = L; j = 0; while(p && (j<i-1)) { p = p->next; ++j; } if(!p || j>i-1) return ERROR; s = new LNode; s->data = e; s->next = p->next; p->next = s; return OK; } Status ListDelete(LinkList &L, int i) //删除 { p = L; j = 0; while((p->next) && (j<i-1)) { p = p->next; ++j; } if(!(p->next) || (j>i-1)) return ERROR; q = p->next; p->next = q->next; delete q; return OK; } void ShowList(LinkList L) //输出 { LNode *p = L->next; while(p) { cout << p->data << " "; p = p->next; } cout << endl; } void SortList(LinkList &L) //排序 { ElemType t; LNode *p, *s, *q; for(p = L->next; p->next != NULL; p = p->next) { s = p; q = p->next; while(q != NULL) { if(s->data > q->data) s = q; q = q->next; } if(p != s) { t = s->data; s->data = p->data; p->data = t; } } }
本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 1无用
悬赏问题
- ¥50 汇编语言除法溢出问题
- ¥65 C++实现删除N个数据列表共有的元素
- ¥15 Visual Studio问题
- ¥15 state显示变量是字符串形式,但是仍然红色,无法引用,并显示类型不匹配
- ¥20 求一个html代码,有偿
- ¥100 关于使用MATLAB中copularnd函数的问题
- ¥20 在虚拟机的pycharm上
- ¥15 jupyterthemes 设置完毕后没有效果
- ¥15 matlab图像高斯低通滤波
- ¥15 针对曲面部件的制孔路径规划,大家有什么思路吗