简单有序表【C语言程序设计】
来源:互联网 发布:java课程表管理系统 编辑:程序博客网 时间:2024/06/06 17:52
一.实验目的:
1.掌握指针与内存地址的关系
2.掌握通过指针动态申请和释放内存的编程方法
3.学习和掌握单向链表的基本操作
二、实验内容和步骤
1.分析并修改下面程序错误,使之能够正常运行。
错误代码一:
输入若干学生的信息(学号、姓名、成绩),当输入学号为 0 时结束,用单向链表组织这些学生信息后,再按序输出。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
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 <stdio.h>
#include <stdlib.h>
#include <string.h>
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;
}
2. 编写程序实现以下功能
简单有序链表的创建和查询修改
(1)建立一个单链表 21 3 15 27 11 18,并输出该链表;
(2)输入序号n,查找序号为n的结点,并输出;
(3)输入值x,查找值为x的结点,并输出;
(4)插入结点: 输入序号 n和值x。在序号为n的结点后插入x,并输出该链表;
(5)删除结点: 输入序号 n,册除序号为 n 的结点,并输出该链表。
代码:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#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;
}
- 简单有序表【C语言程序设计】
- 有序数据【C语言程序设计】
- c语言程序设计简单版
- c语言程序设计
- c语言程序设计
- c语言程序设计
- C语言程序设计
- C语言程序设计
- C语言程序设计
- C语言程序设计
- C语言程序设计
- c语言程序设计
- c语言程序设计
- C语言程序设计
- C语言程序设计
- c语言程序设计
- C语言程序设计
- C 语言程序设计实践 4.1 简单的运算Ⅰ
- 使用typedef定义struct的作用
- 将tf训练的权重保存为CKPT,PB ,CKPT 转换成 PB格式。并将权重固化到图里面,并使用该模型进行预测
- Java经典基础练习21-30
- android推送选型和混合设计
- 关于java.lang.NoClassDefFoundError处理(我遇到的坑could not initialize class xmlreaders)
- 简单有序表【C语言程序设计】
- lnmp 之nginx安装
- Companionship of Books
- docker学习笔记之Docker Compose与docker swarm
- mkisofs------制作iso文件
- Tactical Multiple Defense System UVALive
- 55-经典问题分析四
- MAC JAVA 1.8 与 9 版本切换
- 《Unity Shader入门精要》 第二章 学习笔记