本资料由浙江自考网收集整理,更多自考资料请登录 HYPERLINK "/" /下载
PAGE
PAGE 9
光阴易逝,岂容我待。
《计算机软件基础》实验
实验一 线性表的插入与删除
【实验目的】
掌握线性表的基本运算.
掌握顺序存储的概念, 学会对顺序存储数据结构进行操作.
加深对顺序存储数据结构的理解, 逐步培养解决实际问题的编程能力.
掌握线性表的在链接存储下的插入和删除运算.
【实验内容】
初始化线性表
建立线性表
在线性表中插入指定值的元素
在线性表中删除指定值的元素
在线性表中删除指定位置的元素
在线性表中查找指定元素
输出线性表
【参考程序】
1. 建立学生档案链表
#define LEN sizeof(struct student) /* sizeof() 求字节数运算符 */
struct student
{ long num;
float score;
struct student *next;
};
int n; /* 结点的个数 */
struct student *creat ( )
{ struct student *head; /* 结构体类型 */
struct student *p1,*p2; /*p1 指向新结点, p2 指向最后一个结点*/
n=0;
p1=p2=(struct student *)malloc(LEN); /* 分配一个结点的空间 */
scanf (“%ld,%f”, &p1->num, &p1->score); /* 输入第一个结点的值 */
head=NULL; /* 空链表 */
while(p1->num!=0) /* 若学号=0,则建表结束 */
{ n=n+1; /*结点数*/
if (n==1)
head=p1; /* 第一个结点 */
else
p2->next=p1; /* 链入下一个结点 */
p2=p1;
p1=(struct student *) malloc(LEN); /* 分配一个新结点的空间 */
scanf (“%ld,%f”,&p1->num,&p1->score); /* 输入这个结点的值 */
}
p2->next=NULL;
return(head); /* 返回链表的起始地址 */
}
2. 输出链表
void print( struct student *head ) /* 输入链表的首地址 */
{ struct student *p;
printf("\n现在,存在 %d 个记录是: \n",n);
p=head; /* p 指向第一个结点 */
if (head != NULL) /* 不是空链 */
do
{ printf ("%ld %5.1lf\n",p->num,p->score); /* 输出结点的内容 */
p=p->next; /* p 指向下一个结点 */
} while (p!=NULL); /* p 为空指针时,循环结束 */
}
在单链表中插入指定值的结点
struct student
{ long num;
float score;
struct student *next;
};
struct student *insert ( struct student *head,struct student *stud )
{ struct student *p0,*p1,*p2;
p1=head; /* p1 指向表头 */
p0=stud; /* p0 指向要插入的结点 */
if ( head==NULL ) /* 如果是空表,则接到表头 */
{ head=p0;
p0->next=NULL;
}
else
{ while((p0->num > p1->num) && (p1->next!=NULL ) )