链表实验报告

  • 格式:docx
  • 大小:57.16 KB
  • 文档页数:5

下载文档原格式

  / 5
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

C 语言程序设计实验报告

实验一:链表的基本操作

一·实验目的

1. 掌握链表的建立方法

2. 掌握链表中节点的查找与删除

3. 掌握输出链表节点的方法

4. 掌握链表节点排序的一种方法

5. 掌握C 语言创建菜单的方法

6. 掌握结构化程序设计的方法

二·实验环境

1. 硬件环境:当前所有电脑硬件环境均支持

2. 软件环境:Visual C++6.0

三.函数功能

1. CreateList // 声明创建链表函数

2.TraverseList // 声明遍历链表函数

3. InsertList // 声明链表插入函数

4.DeleteTheList // 声明删除整个链表函数

5. FindList // 声明链表查询函数 四.程序流程图

五.程序代码

#include

#include

typedef int Elemtype;

typedef int Status;

typedef struct node//定义存储节点

{

int data;//数据域

struct node *next;//结构体指针

} *linklist,node;//结构体变量,结构体名称

linklist creat (int n)//创建单链表

{

linklist head,r,p;//定义头指针r,p,指针

int x,i;

head=(node *)malloc(sizeof(node));//生成头结点 声明函数 主函数 main 创建链表函数定义

CreateList 定义链表遍历函数

TraverseList

定义链表查询函数

FindList 定义链表插入函数在链表位置第pos 节点前插入包

含数据val 的节点

InsertList(PNode List, int pos, int val) 插入节点 定义删除整个链表函数 DeleteTheList

定义删除链表元素函数删

除链表中的第pos 节点

DeleteList(PNode List, int pos) 删除节点

r=head;//r指向头结点

printf("输入数字:\n");

for(i=n;i>0;i--)//for 循环用于生成第一个节点并读入数据{

scanf("%d",&x);

p=(node *)malloc(sizeof(node));

p->data=x;//读入第一个节点的数据

r->next=p;//把第一个节点连在头结点的后面

r=p;//循环以便于生成第二个节点

}

r->next=0;//生成链表后的断开符

return head;//返回头指针

}

void output (linklist head)//输出链表

{

linklist p;

p=head->next;

do

{

printf("%3d",p->data);

p=p->next;

}

while(p);

printf("\n")

}

Status insert ( linklist &l,int i, Elemtype e)//插入操作

{

int j=0;

linklist p=l,s;

while(j

{

p=p->next;

++j;

}

if(!p || j>i-1)

return -1;

else

{

s=(node *)malloc(sizeof(node));

s->data=e;

s->next=p->next;

p->next=s;

return 1;

}

}

Status delect ( linklist &l,int i, Elemtype &e)//删除操作

{

int j=0;

linklist p=l,q;

while(jnext)

{

p=p->next;

++j;

}

if(!p->next || j>i-1)

return -1;

else

{

q=p->next;

p->next=q->next;

e=q->data;

free(q);

return 1;

}

}

void combine(linklist la,linklist lb)//合并单链表

{

node *pa,*pb,*pc;

linklist lc;

pa=la->next;

pb=lb->next;

lc=pc=la;

while(pa && pb){

if(pa->data<=pb->data){

pc->next=pa;

pc=pa;

pa=pa->next;

}

else{pc->next=pb;pc=pb;pb=pb->next;} }

pc->next=pa?pa:pb;

free(lb);

}

Status GetElem(linklist l,int i,Elemtype &e )//查找操作 {

linklist p;

int j;

p=l->next;

j=1;

while(p && j

{

p=p->next;

++j;

}

if(!p || j>i)

return -2;

e=p->data;

return e;

}

void main()

{

linklist la,lb;

int n;

int i,j;

Elemtype e;

printf("请输入第一个链表:\n");

printf("输入链表元素的个数:\n");

scanf("%d",&n);

la=creat(n);

printf("输出链表:\n");

output(la);

printf("请输入要查找元素的位置:\n");

scanf("%d",&i);