《数据结构》
实验报告
姓名:
学号:
班级:
学院:
实验一 单链表实验
(一)实验目的
1.理解线性表的链式存储结构。
2.熟练掌握动态链表结构及有关算法的设计。
3.根据具体问题的需要,设计出合理的表示数据的链表结构,并设计相关算法。
(二)实验任务
编写算法实现下列问题的求解
1.求链表中第i个结点的指针(函数),若不存在,则返回NULL。
2.在第i个结点前插入值为x的结点。
3.删除链表中第i个元素结点。
4.在一个递增有序的链表L中插入一个值为x的元素,并保持其递增有序特性。
5.将单链表L中的奇数项和偶数项结点分解开,并分别连成一个带头结点的单链表,然后再将这两个新链表同时输出在屏幕上,并保留原链表的显示结果,以便对照求解结果。
6.求两个递增有序链表L1和L2中的公共元素,并以同样方式连接成链表L3。
(三)主要仪器设备
PC机,Windows操作平台,Visual C++
(四)实验分析
顺序表操作:定义一个顺序表类,该类包括顺序表的存储空间、存储容量和长度,以及构造、插入、删除、遍历等操作的方法
(五)源程序
头文件 文件名:linklist.h
#include<iostream>
using namespace std;
struct node
{
    int data;
    node *next;
};
class list
{
public:
    list();
    int length()const
    {
        return count;    //求链表长度
    }
    ~list();
    void create();                                //链表构建,以0为结束标志
    void output();                                //链表输出
    int get_element(const int i)const;                //按序号取元素
    node *locate(const int x) const;                //搜索对应元素
    int insert(const int i,const int x);                //插入对应元素
    int delete_element(const int i);                //删除对应元素
    node *get_head()
    {
        return head;    //读取头指针
    }
    void insert2(const int x);
    friend void SplitList(list L1, list&L2, list &L3);
    friend void get_public(list L1, list L2, list &L3);
private:
    int count;
    node *head;
};
list::list()
{
    head=new node;
    head->next=NULL;
    count=0;
}
void list::create()                //链表构建,以0为结束标志
{
    int x;
    cout<<"请输入当前链表,以0为结束符。\n";
    cin>>x;
    node *rear=head;
    while(x!=0)
    {
        count++;
        node *s=new node;
        s->data=x;
        rear->next=s;
        rear=s;
        rear->next=NULL;
        cin>>x;
    }
}
void list::output()
{
    node *p=head->next;
    cout<<"******Top of this list******"<<endl;
    while(p!=NULL)
    {
        cout<<p->data<<" ";
        p=p->next;
    }
    cout<<endl<<"******End of this list******"<<endl;
}
int list::get_element(const int i)const    //实验1
{
    int x,j;
    node *p;
    p=head->next;
    j=1;
    while(p!=NULL && j!=i)
    {
        p=p->next;
        j++;
    }
    if(p==NULL) return 0;
    else
    {
        return x=p->data;
        return 1;
    }
}
node *list::locate(const int x)const
{二叉树的遍历及应用实验报告
    node *p=head->next;
    while(p!=NULL)
        if(p->data==x)return p;
        else p=p->next;
    return NULL;
}
int list::insert(const int i,const int x)    //实验2
{
    node *p=head;
    int j=0;
    while(j!=i-1&&p!=NULL)
    {
        p=p->next;
        j++;
    }
    if(i<1||i>count+1)
        return 0;
    node *s=new node;
    s->data=x;
    s->next=p->next;
    p->next=s;
    count++;
    return 1;
}
int list::delete_element(const int i)      //实验3
{
    node *p=head;
    int j=0;
    while(j!=i-1&&p!=NULL)
    {
        p=p->next;

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。