#2
铃铛侠2017-04-08 13:46
|
还有那个insert function好像也有问题,能帮我看看吗?谢谢啦
程序代码:
#include<stdio.h>
#include<string.h>
#define ERROR 0
#define OK 1
typedef struct Student
{
char no[4];
char name[8];
int price;
}Student;
typedef struct Lnode
{
Student data;
struct Lnode *next;
}Lnode, *LinkList;
int i, j;
int InitList(LinkList * addr_L)
{ *addr_L=(LinkList)malloc(sizeof(Lnode));
if (!(*addr_L)) return -2;
(*addr_L)->next= NULL;
return OK;
}
int CreateList(LinkList *L,Student e,int n)//创建链表
{
LinkList p;
*L = (LinkList)malloc(sizeof(Lnode));
(*L)->next = NULL;
Lnode *r;
r = L;
for (j = 0; j<n; j++)
{
p = (LinkList)malloc(sizeof(Lnode));
scanf("%s %s %d",p->data.no,p->data.name,&p->data.price);
e = p->data;
p->next = NULL;
r->next = p;
}
return OK;
}
/*void OutList(LinkList L,int n)//逐个显示表中的元素
{
Lnode *p;
p=L;
j=0;
while(p&&j<n)
{
printf("%s %s %d\n",p->data.no,p->data.name,p->data.price);
p=p->next;
++j;
}
return OK;
}*/
void DisplayElem(LinkList L)//逐个显示表中的元素
{
Lnode *p=L;
while (p!=NULL)
{
printf("%s %s %d\n", p->data.no, p->data.name, p->data.price);
p = p->next;
}
return 0;
}
int Insert()
{
LinkList L;
LinkList p,pre;//
p=L;
LinkList s;
s=(LinkList)malloc(sizeof(struct Lnode));
struct Student NewElement;
printf("请输入学生学号,姓名,成绩:");
scanf("%s %s %d", NewElement.no,NewElement.name,&NewElement.price);
s->data=NewElement;
s->next=NULL;
if(L->data.no==-1)
{
L->data=NewElement;
return 0;
}
int i;
for (i = 0; p!=NULL; i++) {
if (p->data.no > s->data.no)
break;
pre=p;
p=p->next;
}
if(p==L)
{
s->next=L;
L=s;
}
else if(p==NULL)
{
pre->next=s;
}
else
{
pre->next=s;
s->next=p;
}
return 0;
}
int main()
{
int choice,k,i;
Student e;
LinkList L;
printf("\n********************************\n\n");
puts("1. 构造顺序表并录入学生信息");
puts("2. 显示学生信息");
puts("3. 插入学生信息");
puts("0. 退出");
printf("\n********************************\n\n");
while(1)
{
puts("请选择:");
scanf("%d",&choice);
if(choice==0)
break;
switch(choice)
{
case 1:
if (InitList(&L))
printf("初始化链表成功\n");
else
printf("初始化链表失败\n");
printf("请输入学生个数:\n");
scanf("%d", &k);
printf("请输入学生信息:学号 姓名 成绩\n");
if (CreateList(L,e,k))
printf("创建成功\n");
else
printf("创建失败\n");
break;
case 2:
printf("输出每个同学的成绩:\n");
DisplayElem(L);
break;
case 3:
if (Insert(L))
printf("插入成功\n");
else
printf("插入失败\n");
break;
}
}
printf("\n\n谢谢您的使用,请按任意键退出\n\n\n");
system("pause");
return 0;
return 0;
}
#include<string.h>
#define ERROR 0
#define OK 1
typedef struct Student
{
char no[4];
char name[8];
int price;
}Student;
typedef struct Lnode
{
Student data;
struct Lnode *next;
}Lnode, *LinkList;
int i, j;
int InitList(LinkList * addr_L)
{ *addr_L=(LinkList)malloc(sizeof(Lnode));
if (!(*addr_L)) return -2;
(*addr_L)->next= NULL;
return OK;
}
int CreateList(LinkList *L,Student e,int n)//创建链表
{
LinkList p;
*L = (LinkList)malloc(sizeof(Lnode));
(*L)->next = NULL;
Lnode *r;
r = L;
for (j = 0; j<n; j++)
{
p = (LinkList)malloc(sizeof(Lnode));
scanf("%s %s %d",p->data.no,p->data.name,&p->data.price);
e = p->data;
p->next = NULL;
r->next = p;
}
return OK;
}
/*void OutList(LinkList L,int n)//逐个显示表中的元素
{
Lnode *p;
p=L;
j=0;
while(p&&j<n)
{
printf("%s %s %d\n",p->data.no,p->data.name,p->data.price);
p=p->next;
++j;
}
return OK;
}*/
void DisplayElem(LinkList L)//逐个显示表中的元素
{
Lnode *p=L;
while (p!=NULL)
{
printf("%s %s %d\n", p->data.no, p->data.name, p->data.price);
p = p->next;
}
return 0;
}
int Insert()
{
LinkList L;
LinkList p,pre;//
p=L;
LinkList s;
s=(LinkList)malloc(sizeof(struct Lnode));
struct Student NewElement;
printf("请输入学生学号,姓名,成绩:");
scanf("%s %s %d", NewElement.no,NewElement.name,&NewElement.price);
s->data=NewElement;
s->next=NULL;
if(L->data.no==-1)
{
L->data=NewElement;
return 0;
}
int i;
for (i = 0; p!=NULL; i++) {
if (p->data.no > s->data.no)
break;
pre=p;
p=p->next;
}
if(p==L)
{
s->next=L;
L=s;
}
else if(p==NULL)
{
pre->next=s;
}
else
{
pre->next=s;
s->next=p;
}
return 0;
}
int main()
{
int choice,k,i;
Student e;
LinkList L;
printf("\n********************************\n\n");
puts("1. 构造顺序表并录入学生信息");
puts("2. 显示学生信息");
puts("3. 插入学生信息");
puts("0. 退出");
printf("\n********************************\n\n");
while(1)
{
puts("请选择:");
scanf("%d",&choice);
if(choice==0)
break;
switch(choice)
{
case 1:
if (InitList(&L))
printf("初始化链表成功\n");
else
printf("初始化链表失败\n");
printf("请输入学生个数:\n");
scanf("%d", &k);
printf("请输入学生信息:学号 姓名 成绩\n");
if (CreateList(L,e,k))
printf("创建成功\n");
else
printf("创建失败\n");
break;
case 2:
printf("输出每个同学的成绩:\n");
DisplayElem(L);
break;
case 3:
if (Insert(L))
printf("插入成功\n");
else
printf("插入失败\n");
break;
}
}
printf("\n\n谢谢您的使用,请按任意键退出\n\n\n");
system("pause");
return 0;
return 0;
}
测试图如下:
只有本站会员才能查看附件,请 登录