链表实验报告 下载本文

内容发布更新时间 : 2024/6/8 5:17:07星期一 下面是文章的全部内容请认真阅读。

C语言程序设计实验报告

实验一:链表的基本操作

一·实验目的

1. 掌握链表的建立方法

2. 掌握链表中节点的查找与删除 3. 掌握输出链表节点的方法 4. 掌握链表节点排序的一种方法 5. 掌握C语言创建菜单的方法 6. 掌握结构化程序设计的方法 二·实验环境

1. 硬件环境:当前所有电脑硬件环境均支持 2. 软件环境:Visual C++6.0 三.函数功能

1. CreateList // 声明创建链表函数 2.TraverseList // 声明遍历链表函数 3. InsertList // 声明链表插入函数

4.DeleteTheList // 声明删除整个链表函数 5. FindList // 声明链表查询函数 四.程序流程图

声明函数 主函数 main 创建链表函数定义 CreateList 定义链表遍历函数 TraverseList 定义链表查询函数 FindList 定义链表插入函数在链表位置第pos节点前插入包含数据val的节点 InsertList(PNode List, int pos, int val) 插入节点 定义删除整个链表函数 DeleteTheList 定义删除链表元素函数删除链表中的第pos节点DeleteList(PNode List, int pos) 删除节点 五.程序代码 #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));//生成头结点

r=head;//r指向头结点 printf(\输入数字:\\n\ for(i=n;i>0;i--)//for 循环用于生成第一个节点并读入数据 { scanf(\ 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(\ p=p->next; } while(p); printf(\}

Status insert ( linklist &l,int i, Elemtype e)//插入操作 { int j=0; linklist p=l,s; while(jnext; ++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 && jnext; ++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(\ la=creat(n); printf(\输出链表:\\n\ output(la); printf(\请输入要查找元素的位置:\\n\ scanf(\