简单有序表【C语言程序设计】

你的名字 2022-06-06 05:28 347阅读 0赞

一.实验目的:

1.掌握指针与内存地址的关系

2.掌握通过指针动态申请和释放内存的编程方法

3.学习和掌握单向链表的基本操作







二、实验内容和步骤

1.分析并修改下面程序错误,使之能够正常运行。

错误代码一:

输入若干学生的信息(学号、姓名、成绩),当输入学号为 0 时结束,用单向链表组织这些学生信息后,再按序输出。

#include

#include

#include

structstud_node

{

intnum;

char name[20];

int score;

structstud_node *next;

};

int main()

{

structstud_node *head,*tail,*p;

intnum,score;

char name[20];

int size = sizeof(structstud_node);

head=tail=NULL;

printf(“input num,name and score:\n”);

scanf(“%d”,&num);

while(num != 0)

{

p=malloc(size);

scanf(“%s%d”,name,&score);

p->num=num;

strcpy(p->name,name);

p->score=score;

p->next=NULL;

tail->next=p;

tail=p;

scanf(“%d”,&num);

}

for(p=head;p->next != NULL;p=p->next)

printf(“%d %s %d\n”,p->num,p->name,p->score);

return 0;

}

正确代码:

#include

#include

#include

struct stud_node

{

int number;

char name[20];

int score;

struct stud_node *next;

};

int main()

{

struct stud_node*head,*tail,*p;

int num,scor,cnt=0;

char name[20];

int size = sizeof(structstud_node);

head=(struct stud_node*)malloc(size);

printf(“input num:\n”);

scanf(“%d”,&num);

while(num != 0)

{

cnt++;

printf(“inputname and score:\n”);

scanf(“%s%d”,name,&scor);

p=(struct stud_node*)malloc(size);

p->number=num;

strcpy(p->name,name);

p->score=scor;

if(cnt==1)

{

head->next=p;

tail=p;

}

else

{

tail->next=p;

tail=p;

}

printf(“\ninputnum:\n”);

scanf(“%d”,&num);

}

tail->next=NULL;

p=head->next;

printf(“\nThestudents’ massage:\n”);

while(p!=NULL)

{

printf(“%d %s %d\n”,p->number,p->name,p->score);

p=p->next;

}

return 0;

}

  1. 编写程序实现以下功能

简单有序链表的创建和查询修改

(1)建立一个单链表 21 3 15 27 11 18,并输出该链表;

(2)输入序号n,查找序号为n的结点,并输出;

(3)输入值x,查找值为x的结点,并输出;

(4)插入结点: 输入序号 n和值x。在序号为n的结点后插入x,并输出该链表;

(5)删除结点: 输入序号 n,册除序号为 n 的结点,并输出该链表。

代码:

#include

#include

#include

#define lis struct list*

#define setup malloc(sizeof(lis))

struct list

{

int n,x;

lis next;

};

int i,len=6;

lis p;

lis t;

lis generate()

{

lis head;

lis tail;

for(i=1;i<=len;i++)

{

p=setup;

p->n=i;

printf(“Input %d number’s price:\n”,i);

scanf(“%d”,&p->x);

if(i==1)

{

head=tail=p;

}

else

{

tail->next=p;

tail=p;

}

}

tail->next=NULL;

return(head);

}

void search_n(lis head)

{

intnn,flag=0;

printf(“Please input n:\n”);

scanf(“%d”,&nn);

p=head;

while(p!=NULL)

{

if(p->n==nn)

{

printf(“%d %d\n”,p->n,p->x);

flag=1;

}

p=p->next;

}

if(!flag)

printf(“Not find %d number’s node.\n”,nn);

}

void search_x(lis head0)

{

intxx,flag=0;

printf(“Please input x:\n”);

scanf(“%d”,&xx);

p=head0;

while(p!=NULL)

{

if(p->x==xx)

{

printf(“%d %d\n”,p->n,p->x);

flag=1;

}

p=p->next;

}

if(!flag)

printf(“Not find %d price of node.\n”,xx);

}

lis insert(lis head1)

{

int n,x;

printf(“Please input n and x:\n”);

scanf(“%d%d”,&n,&x);

lis k=setup;

k->n=n;

k->x=x;

p=head1;

while(p->n!=n)

{

p=p->next;

}

if(p->next!=NULL)

{

t=p->next;

p->next=k;

k->next=t;

}

else

{

p->next=k;

k->next=NULL;

}

return(head1);

}

lis delet(lis head2)

{

int n;

printf(“Please input n to delete the node:\n”);

scanf(“%d”,&n);

p=head2;

while(p!=NULL)

{

if(p->n==n)

{

p=p->next;

t->next=p;

}

t=p;

p=p->next;

}

return(head2);

}

void output(lis head)

{

printf(“The current list:\n”);

p=head;

while(p!=NULL)

{

printf(“%d %d\n”,p->n,p->x);

p=p->next;

}

}

int main()

{

lisa=generate();

output(a);

search_n(a);

search_x(a);

output(insert(a));

output(delet(a));

return 0;

}

发表评论

表情:
评论列表 (有 0 条评论,347人围观)

还没有评论,来说两句吧...

相关阅读