数据结构:同时具有删除,添加,从大到小排序功能的链表(数字要可以键盘输入)

作业,学的不太好,看见过的帮忙解答一下,谢谢
编译时第十四行有一个错误啊?
最新回答
偶尔动情

2024-06-26 00:16:32

#include<stdio.h>
#include<stdlib.h>
#define OK 1
#define OVERFLOW -2
#define ERROR 0
typedef int ElemType;
typedef int Status;

typedef struct LNode{
ElemType data;
struct LNode *next;
}LNode,*LinkList;

void CreateList_L(LinkList &L,int n){
int i;
LinkList p,rear;
L=rear=(LinkList)malloc(sizeof(LNode));
L->next=NULL;
for(i=1;i<=n;i++){
printf("请输入第%d个元素:",i);
p=(LinkList)malloc(sizeof(LNode));
scanf("%d",&p->data);
p->next=NULL;
rear->next=p;
rear=p;
}
}

Status ListInsert_L(LinkList &L,int i,ElemType e){
LinkList p,s;
int j;
p=L;j=0;
while(p&&j<i-1){p=p->next;++j;}
if(!p||j>i-1)return ERROR;
s=(LinkList)malloc(sizeof(LNode));
s->data=e;s->next=p->next;
p->next=s;
return OK;
}

Status ListDelete_L(LinkList &L,int i,ElemType &e){
LinkList p,q;
int j;
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;
e=q->data;free(q);
return OK;
}

Status ChangElem_L(LinkList &L,int i,ElemType e){
LinkList p;
int j;
p=L->next;j=1;
while(p&&j<i){
p=p->next;++j;
}
if(!p||j>i)return ERROR;
p->data=e;
return OK;
}

Status GetElem_L(LinkList L,int i,ElemType &e){
LinkList p;
int j;
p=L->next;j=1;
while(p&&j<i){
p=p->next;++j;
}
if(!p||j>i)return ERROR;
e=p->data;
return OK;
}

void SortList(LinkList head)
{LinkList p,q,large;int temp;
for(p=head->next;p->next!=NULL;p=p->next)
{large=p;
for(q=p->next;q;q=q->next)
if(q->data>large->data)
large=q;
if(large!=p)
{temp=p->data;
p->data=large->data;
large->data=temp;}
}
}

void PrintList(LinkList L){
LinkList p;
p=L->next;
do{
printf("%d,",p->data);
p=p->next;
}while(p);
printf("\n");
}

void main()
{int n,e,i,flag;
LinkList L;
printf("请输入元素个数:");
scanf("%d",&n);
CreateList_L(L,n);
printf("原始单链表:");
PrintList(L);
printf("\n请选择要进行的操作:\n1 增,2 删,3 改,4 查,5 排序\n输入选择序号:");
scanf("%d",&flag);
switch(flag)
{
case 1:
printf("请输入要插入的元素:");
scanf("%d",&e);
printf("请输入要插入的位置:");
scanf("%d",&i);
ListInsert_L(L,i,e);
printf("改变后的单链表:");
PrintList(L);
break;
case 2:
printf("请输入要删除元素的位置:");
scanf("%d",&i);
ListDelete_L(L,i,e);
printf("改变后的单链表:");
PrintList(L);
break;
case 3:
printf("请输入新的值:");
scanf("%d",&e);
printf("请输入要修改元素的位置:");
scanf("%d",&i);
ChangElem_L(L,i,e);
printf("改变后的单链表:");
PrintList(L);
break;
case 4:
printf("请输入要查找元素的位置:");
scanf("%d",&i);
GetElem_L(L,i,e);
printf("第%d个元素的值是:%d\n",i,e);
break;
case 5:
SortList(L);
printf("从大到小排序后的链表:\n");
PrintList(L);
break;
default:
printf("你输入的选择不存在!\n");
break;
}
}
能实现增删改查和排序
我运行的时候没错误啊?能说一下是什么错误吗,VC++下面有提示的