资源描述:
《数据结构链表c语言实现》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库。
1、数学与信息技术学院2016~2017(下)学年计科专业2015级《数据结构》实验报告2学号:2015201018姓名:汪继超实验名称线性表的链式存储结构完成时间一.实验目的1.掌握单链表的概念及其各种运算的原理。2.通过对单链表的建立及几种基本运算等的算法实现,掌握线性表的链式存储结构、各种运算和指针的表示及应用等内容。初步掌握运用链式结构的编程和调试程序的能力。3.用C语言实现并上机调试通过,认真填写实验报告二.实验要求4.采用链式存储结构完成。5.注意类C和C的转换。6.上机调试通过,认真书写实验报告。
2、三.实验原理链表是一种动态存储结构。线性表的链式存储结构的特点是用一组任意的存储单元(可以是连续的,也可以是不连续的)存放线性表的数据元素。线性表的一个结点由两个域组成:存放自身的数据和存放直接后继结点存储位置的指针域。用指针相连接的结点序列称为链表,若逻表中每个结点只包含一个指针域,则此链表为线性链表或单链表。通常链表中的每个结点可以有若干个数据域和多个链域。我们常用C语言中的“指针”类型来描述线性链表。四.实验内容(1)定义函数create_linklist():建立一个具有n个结点的单向链表L,要求返
3、回表头指针;(2)定义函数count_node():统计结点个数,要求以表头指针作为调用函数,返回结点个数;(3)定义函数insert_node():在链表L的第I个结点前插入一个结点,要求以表头指针作为调用函数,无返回值;(1)定义函数delete_node():删除链表L的第I个元素,要求以表头指针作为调用函数,无返回值;(2)定义函数print_node():输出单链表;(3)以上每次操作结束,输出单链表,要求以表头指针作为调用函数,无返回值。实验过程:#include#includ
4、e#include#includetypedefintElemType;typedefstructLnode{ElemTypedata;structLnode*next;}Lnode,*LinkList;voidprint_node(LinkListL);voidcolor(constunsignedshortcolor1)//颜色函数{if(color1>=0&&color1<=15)SetConsoleTextAttribute(GetStd
5、Handle(STD_OUTPUT_HANDLE),color1);elseSetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),7);}LinkListcreate_linklist(LinkListL)//建立链表L,返回表头指针;{inti,n;Lnode*p,*q;//L为头指针,p为新元素指针,q为表尾指针q=L;L->next=NULL;color(13);printf("请输入您要创建的数据条数:");scanf("%d",&n);
6、printf("请输入数据:");for(i=0;idata);q->next=p;q=p;}fflush(stdin);//清空在此前输入缓冲区q->next=NULL;printf("已创建数据:");print_node(L);color(10);returnL;}voidprint_node(LinkListL)//打印{Lnode*p;p=L->next;while(p){prin
7、tf("%5d",p->data);p=p->next;}printf("");}intcount_node(LinkListL)//统计{intcount=0;Lnode*p;p=L->next;while(p){p=p->next;count++;}color(13);printf("统计得总共记录为:%d条",count);color(10);returncount;}voidinsert_node(Lnode*L,inti,ElemTypex,intcount)//插入;{Lnode*p
8、,*q;intk,s;count=count_node(L);color(13);printf("链表当前数据:");print_node(L);color(10);printf("请输入插入的位置和元素,以空格隔开:");scanf("%d%d",&k,&s);color(13);/*先判断位置是否合法,合法执行插入操作,反之则不执行。*/if(k<1
9、
10、k>count-1){printf("插入元