【数据结构】2,单链表的基本操作
实验内容: 编写一个完整的程序,实现单链表的生成、插入、删除、输出等基本操作。
(1) 随机产生或键盘输入一组元素,建立一个带头结点的单向链表(无序)。
(2) 计算单链表的长度,遍历单链表。
(3) 把单链表中的元素逆置(不允许申请新的结点空间)。
(4) 在单链表中删除所有值为偶数的元素结点。
(5) 编写在非递减有序单链表中插入一个元素使链表元素仍有序的函数,并利用该函数建立一个非递减有序单链表。
(6) *利用算法5建立两个非递减有序单链表,然后合并成一个非递增有序链表。
(7) *利用算法5建立两个非递减有序单链表,然后合并成一个非递减有序链表。
(8) *利用算法1建立的链表,实现将其分解成两个链表,其中一个全部为奇数,另一个全部为偶数(尽量利用已知的存储空间)。
(9) *采用单链表实现一元多项式的存储并实现两个多项式相加并输出结果。
(10) 在主函数中设计一个简单的菜单,分别调试上述算法。
1,一些定义
#include <iostream>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>
#define TRUE 1
#define FALSE 0
#define OK 1
#define ERROR 0
typedef int Status;
typedef int Elemtype;
2.定义结构体
typedef struct Node
{
Elemtype data;
struct Node *next;
} Lnode,*LinkList;
3.菜单
void menu(); /*菜单*/
Status Init_Linklist(LinkList &L); /*初始化空表*/
Status Creat_Linklist(LinkList &L); /*尾插法建立单链表*/
void Disp_Linklist(LinkList L); /*单链表遍历*/
int length_Linklist(LinkList L); /*计算单链表长度*/
void Reverse_Linklist(LinkList L); /*单链表逆置*/
void DelEven_Linklist(LinkList L); /*删除值为偶数的结点*/
Status Insert_Linklist(LinkList L, int x); /*在有序单链表L中插入元素x,链表仍然有序*/
Status CreatOrder_Linklist(LinkList &L); /*创建非递减有序单链表*/
void MergeDescend_Linklist(LinkList La, LinkList Lb, LinkList &Lc); /*两个非递减有序单链表La和Lb合并成一个非递增有序链表Lc*/
void MergeAscend_Linklist(LinkList La, LinkList Lb, LinkList &Lc); /*两个非递减有序单链表La和Lb合并成一个非递减有序链表Lc*/
void Split_Linklis