线性表的链式存储结构_第1页
线性表的链式存储结构_第2页
线性表的链式存储结构_第3页
线性表的链式存储结构_第4页
线性表的链式存储结构_第5页
已阅读5页,还剩3页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、计科2012级数据结构实验报告二学号: 姓名: 实验名称线性表的链式存储结构完成时间2014-4-4实验目的1、 掌握单链表的概念及其各种运算的原理。2、通过对单链表的建立及几种基本运算等的算法实现,掌握线性表的链式存储结构、各种运算和指针的表示及应用等内容。初步掌握运用链式结构的编程和调试程序的能力。实验内容1、定义函数create_linklist(): 建立一个具有n个结点的单向链表L,要求返回表头指针;2、定义函数count_node():统计结点个数,要求以表头指针作为调用函数,返回结点个数;3、定义函数insert_node():在链表L的第I个结点前插入一个结点,要求以表头指针作

2、为调用函数,无返回值;4、定义函数delete_node():删除链表L的第I个元素,要求以表头指针作为调用函数,无返回值;5、定义函数print_node():输出单链表;6、以上每次操作结束,输出单链表,要求以表头指针作为调用函数,无返回值。实验要求1、采用链式存储结构完成。2、注意类C和C的转换。3、上机调试通过,认真书写实验报告。实验过程:#include <stdlib.h>#include <stdio.h>#include<conio.h>#define OK 1#define ERROR 0typedef int ElemType;typed

3、ef struct Node ElemType data; struct Node *next;Node,*LinkList;/1菜单选择函数int menu_select() int sn;printf("n");printf(" 主菜单 n");printf("_n");printf(" 1.单链表的建立 n");printf(" 2.统计结点个数 n");printf(" 3.单链表的插入 n");printf(" 4.单链表的结点的删除n");pr

4、intf(" 5.单链表的输出 n");printf(" 6.退 出 n");printf("_n");printf(" 请选择0-6: ");for(;)scanf("%d",&sn);if(sn<1|sn>6)printf("nt输入错误,重选?1-6: ");else break;return sn;void InitList(LinkList *L)*L=(LinkList)malloc(sizeof(Node);(*L)->next=NUL

5、L;/*void InitList(LinkList L)L=(LinkList)malloc(sizeof(Node);L->next=NULL;*/2.通过键盘输入链表中元素值,建立单链表L。struct list /结点类型 int data; struct list *next; ; struct list *head;/声明结点指针int static length;/声明表长变量struct list *creat_n()/创建有n个元素的链表 struct list *q,*p,*head=NULL; printf("n输入你所要创建的结点数: ");

6、scanf("%d",&length); head=p=(list*)malloc(sizeof(list); /创建一个新结点并用头指针指向它 printf("输入该结点的值: "); scanf("%d", &p->data); p->next=NULL; for(int i=length-1;i>=1;i-) q=p;p=(list*)malloc(sizeof(list); /创建新结点printf("输入该结点的值: "); scanf("%d", &

7、amp;p->data); q->next=p; printf("输入完毕nn"); p->next=NULL;return head; /3.输出表长与结点值函数struct list * output() struct list *p; p=head; printf("n当前链表中存有的元素:n");while(p!=NULL) printf("%dn",p->data); p=p->next; printf("当前的表长是: %dnn",length);/输出当前表长 retur

8、n head;/4.插入结点函数void insert()struct list *k,*p,*q;int x;printf("请输入你要在哪个结点值之前插入新结点: ");scanf("%d",&x);k=(list*)malloc(sizeof(list);/创建新结点printf("请输入新结点的值: ");scanf("%d",&k->data);k->next=NULL;if(head=NULL)/若链表为空,则直接入链表head=k;length=length+1;print

9、f("插入成功nn");else if(head->data=x)/在第一个结点前插入新结点 k->next=head;head=k;printf("插入成功nn");length=length+1;elseq=head;p=head->next;while(p != NULL) && (p->data != x)/找出值为X的结点的位置q = p;p = p->next; if (p = NULL)q->next=k;/在链表末插入新结点printf("插入成功n");length

10、=length+1;else if(p->data = x)/在要求的X结点前插入新结点k->next=p;q->next=k;printf("插入成功nn");length=length+1; output(); /5.删除结点函数int delet() struct list *q,*p;int x,y;printf("请输入你所要删除的结点值: ");scanf("%d",&x);if(head=NULL)/表空printf("表空n");return 0 ;else if(x=he

11、ad->data)/第一个结点为删除的结点q=head;head=head->next;y=q->data;free(q);printf("删除成功nn");length=length-1;output();return(y);elseq=head;p=head->next;while(p != NULL) && (p->data != x)/找出值为X的结点q=p;p=p->next;if(p=NULL)printf("没有删除对象n");if(x=p->data)/删除值为X的结点q->

12、next=p->next;y=p->data;free(p);printf("删除成功nn");length=length-1;output();return (y); else printf("表中没有指定的结点n");output();return 0;return 0;/6主控菜单处理调试程序。void main() LinkList L;InitList(&L);int i;for(;) switch(menu_select()case 1:printf("n单链表的建立");printf("请输入链表中结点的值(如:1 2 3): n");head=creat_n();break;case 2:output();break;case 3:insert();break;case 4: delet();break;case 5:printf(&q

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论