文档详情

(完整word版)实验二单链表基本操作(word文档良心出品)

汽***
实名认证
店铺
DOC
62.50KB
约10页
文档ID:478608215
(完整word版)实验二单链表基本操作(word文档良心出品)_第1页
1/10

实用标准实验二 单链表基本操作一 实验目的1. 学会定义单链表的结点类型,实现对单链表的一些基本操作和具体的函数定义,了解并掌握单链表的类定义以及成员函数的定义与调用2. 掌握单链表基本操作及两个有序表归并、 单链表逆置等操作的实现二 实验要求1. 预习 C 语言中结构体的定义与基本操作方法2.对单链表的每个基本操作用单独的函数实现3.编写完整程序完成下面的实验内容并上机运行4.整理并上交实验报告三 实验内容1.编写程序完成单链表的下列基本操作:(1) 初始化单链表 La2) 在 La 中第 i 个元素之前插入一个新结点3) 删除 La 中的第 i 个元素结点4) 在 La 中查找某结点并返回其位置5) 打印输出 La 中的结点元素值2 . 构造两个带有表头结点的有序单链表 La、Lb,编写程序实现将 La、 Lb 合并成一个有序单链表 Lc合并思想是:程序需要 3 个指针: pa、pb、 pc,其中 pa,pb 分别指向 La 表与 Lb 表中当前待比较插入的结点, pc 指向 Lc 表中当前最后一个结点依次扫描 La 和 Lb 中的元素,比较当前元素的值,将较小者链接到 *pc 之后,如此重复直到 La 或 Lb 结束为止,再将另一个链表余下的内容链接到 pc 所指的结点之后。

3.构造一个单链表 L,其头结点指针为 head,编写程序实现将 L 逆置即最后一个结点变成第一个结点,原来倒数第二个结点变成第二个结点,如此等等四 思考与提高1.如果上面实验内容 2 中合并的表内不允许有重复的数据该如何操作?2.如何将一个带头结点的单链表 La 分解成两个同样结构的单链表 Lb,Lc,使得 Lb 中只含 La 表中奇数结点, Lc 中含有 La 表的偶数结点?文案大全实用标准1.编写程序完成单链表的下列基本操作:(1) 初始化单链表 La2) 在 La 中第 i 个元素之前插入一个新结点3) 删除 La 中的第 i 个元素结点4) 在 La 中查找某结点并返回其位置5) 打印输出 La 中的结点元素值include#include#include #define OK 1#define ERROR 0typedef int Status;typedef int ElemType;// 定义存储结构typedef struct Lnode{int data; /* 每个元素数据信息 */struct Lnode *next; /* 存放后继元素的地址 */} LNode,*LinkList;int main(){void Create_L(LinkList &L,int n);void Print_L(LinkList L);Status ListInsert_L(LinkList &L,int i,ElemType e);Status ListDelete_L(LinkList &L,int i,ElemType &e);Status Find_L(LinkList L,int e);LinkList La;// 创建单链表 Laint n;printf(" 请输入链表 La 中的元素个数 :\n");scanf("%d",&n);Create_L(La,n);// 初始化单链表printf(" 现在 La 中的元素为 :\n");Print_L(La);printf("-------------------------------------\n\n");printf(" 现在准备插入元素,请输入插入位置及所插入元素的值 \n");int i,e;scanf("%d %d",&i,&e);ListInsert_L(La,i,e);文案大全实用标准printf(" 插入后 La 中的元素为 :\n");Print_L(La);printf("-------------------------------------\n\n");printf(" 现在准备删除元素,请输入删除位置 \n");scanf("%d",&i);ListDelete_L(La,i,e);printf(" 删除后 La 中的元素为 :\n");Print_L(La);printf("-------------------------------------\n\n");printf(" 请输入所要查找元素的值 :\n");scanf("%d",&e);Find_L(La,e);printf(" 所要查找元素的位置为 :%d\n",Find_L(La,e));}void Create_L(LinkList &L,int n){int j=1;L=(LinkList)malloc(sizeof(Lnode));L->next =NULL;// 先建立一个带头结点的单链线性表 L for(int i=n;i>0;--i){LinkList p=(LinkList)malloc(sizeof(Lnode));printf(" 请输入链表 La 中的第 %d个元素 :\n",j++);scanf("%d",&p->data);p->next=L->next;L->next =p;}//( 逆序实现 )/*LinkList q=L;for(int i=1;i<=n;i++){LinkList p=(LinkList)malloc (sizeof(Lnode));q->next=p;p->next=NULL;q=q->next ;printf(" 请输入链表 La 中的第 %d个元素 :\n",i);文案大全实用标准scanf("%d",&p->data);}//( 正序实现 )*/}// 初始化单链表// 输出单链表void Print_L(LinkList L){LinkList p;p=L->next;while(p){printf("%d ",p->data );p=p->next;}printf("\n");}// 在单链表 L 的第 i 个位置前插入元素 eStatus ListInsert_L(LinkList &L,int i,ElemType e){LinkList p=L;int j=0;while(p&&jnext; ++j;}if(!p||j>i-1) return ERROR;LinkList s=(LinkList)malloc(sizeof(LNode));s->data=e; s->next=p->next;p->next=s;return OK;} //ListInsert_L// 删除单链表 L 中第 i 个位置上的元素Status ListDelete_L(LinkList &L,int i,ElemType &e){LinkList p=L;int j=0;while( p->next && jnext; ++j;}if(!p->next||j>i-1) return ERROR;LinkList q=p->next; p->next=q->next;e=q->data;free(q);return OK;}//LinkDelete_L/* 查找元素 并返回位置 */Status Find_L(LinkList L,int e){LinkList p=L->next;int j=1;while(p->data!=e&&p->next){p=p->next;j++;}if(p->data==e) return j;else{printf(" 无当前元素 \n");return ERROR;}if(!p){printf(" 无当前元素 \n");return ERROR;}}// 定位2 . 构造两个带有表头结点的有序单链表 La、Lb,编写程序实现将 La、Lb 合并成一个有序单链表 Lc。

合并思想是:程序需要 3 个指针: pa、 pb、pc,其中 pa,pb 分别指向 La 表与 Lb 表中当前待比较插入的结点, pc 指向 Lc 表中当前最后一个结点依次扫描La 和 Lb 中的元素,比较当前元素的值,将较小者链接到 *pc 之后,如此重复直到 La 或 Lb 结束为止,再将另一个链表余下的内容链接到 pc 所指的结点之后文案大全实用标准#include#include#include #define OK 1#define ERROR 0typedef int Status;typedef int ElemType;// 定义存储结构typedef struct Lnode{int data; /* 每个元素数据信息 */struct Lnode *next; /* 存放后继元素的地址 */} LNode,*LinkList;void main(){void Create_L(LinkList &L,int n);void Print_L(LinkList L);void MergeList_L(LinkList &La, LinkList &Lb,LinkList &Lc);LinkList La,Lb,Lc;// 创建单链表 La,Lb,Lcint n;printf(" 请输入链表。

下载提示
相似文档
正为您匹配相似的精品文档