数学与信息技术学院2016~2017(下)学年
计科专业2015级《数据结构》实验报告 2
学号:2015201018 姓名:汪继超
实验名称
线性表的链式存储结构
完成时间
掌握单链表的概念及其各种运算的原理。
通过对单链表的建立及几种基本运算等的算法实现,掌握线性表的链式存储结构、各种运算和指针的表示及应用等内容。初步掌握运用链式结构的编程和调试程序的能力。
用C语言实现并上机调试通过,认真填写实验报告
采用链式存储结构完成。
注意类C和C的转换。
上机调试通过,认真书写实验报告。
链表是一种动态存储结构。线性表的链式存储结构的特点是用一组任意的存储单元(可以是连续的,也可以是不连续的)存放线性表的数据元素。线性表的一个结点由两个域组成:存放自身的数据和存放直接后继结点存储位置的指针域。用指针相连接的
结点序列称为链表,若逻表中每个结点只包含一个指针域,则此链表为线性链表或单链表。通常链表中的每个结点可以有若干个数据域和多个链域。我们常用C语言中的“指针”类型来描述线性链表。
定义函数create_linklist(): 建立一个具有n个结点的单向链表L,要求返回表头指针;
定义函数count_node():统计结点个数,要求以表头指针作为调用函数,返回结点个数;
定义函数insert_node():在链表L的第I个结点前插入一个结点,要求以表头指针作为调用函数,无返回值;
定义函数delete_node():删除链表L的第I个元素,要求以表头指针作为调用函数,无返回值;
定义函数print_node():输出单链表;
以上每次操作结束,输出单链表,要求以表头指针作为调用函数,无返回值。
实验过程:
#include<>
#include<>
#include<>
#include<>
typedef int ElemType;
typedef struct Lnode{
ElemType data;
struct Lnode *next;
}Lnode, *LinkList;
void print_node(LinkList L);
void color(const unsigned short color1)//颜色函数
{
if(color1>=0&&color1<=15)
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), color1);
else
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), 7);
}
LinkList create_linklist(LinkList L)//建立链表L,返回表头指针;
{
int i,n;
Lnode *p,*q;//L为头指针,p为新元素指针,q为表尾指针
q=L;
L->next=NULL;
color(13);
printf("\n请输入您要创建的数据条数:");
scanf("%d",&n);
printf("\n请输入数据:");
for(i=0;i<n;i++)
{
p=(Lnode *)malloc(sizeof(Lnode));
scanf("%d",&p->data);
q->next=p;
q=p;
}
fflush(stdin);//清空在此前输入缓冲区
q->next=NULL;
printf("\n已创建数据:");
print_node(L);
color(10);
return L;
}
void print_node(LinkList L)//打印
{
Lnode *p;
p=L->next;
while(p)
{
printf("%5d",p->data);
p=p->next;
}
printf("\n");
}
int count_node(LinkList L)//统计
{
int count=0;
Lnode *p;
p=L->next;
while(p)
{
p=p->next;
count++;
}
color(13);
printf("\n统计得总共记录为:%d条\n",count);
color(10);
return count;
}
void insert_node(Lnode *L,int
数据结构链表C语言实现 来自淘豆网m.daumloan.com转载请标明出处.