线性表的基本操作

线性表的基本操作及应用

一、实验目的

1、帮助复习C++语言程序设计中的知识。
2、熟悉线性表的逻辑结构。
3、熟悉线性表的基本运算在两种存储结构上的实现,其中以熟悉链表的操作为侧重点。

二、实验内容

单链表的基本操作

[问题描述]

实现带头结点的单链表的建立、求长度,取元素、修改元素、插入、删除等单链表的基本操作。

[基本要求]

(1)依次从键盘读入数据,建立带头结点的单链表;

(2)输出单链表中的数据元素

(3)求单链表的长度;

(4)根据指定条件能够取元素和修改元素;

(5)实现在指定位置插入和删除元素的功能。

[测试数据]

单链表的结点类型定义:

//定义单链表的结点类型 
    typedef struct LNode
    {   
    ElemType data;
      struct LNode *next;
    }LNode,*LinkedList;

插入函数:

插入时需要输入插入的位置及插入元素,代码如下:

void ListInsert(LinkList &L,int e,int i)
{
    LNode *p=L;
    int j=0;    
    //查找第i-1个结点,p指向该结点
    while(p&&(j<i-1))  {
    p=p->next;
    j++;
    } 
    if(!p||j>i-1)
    printf("位置错误!"); //i>n+1或者i<1,删除位置不合理
    LNode *s=new LNode;//生成新结点*s
    s->data=e;  //将新结点*s的数据域置为e
    s->next=p->next; //将结点*s的指针域指向结点*p的指针域
    p->next=s;  //将结点*p的指针域指向结点*s
}

插入函数运行示例

修改函数:

先调用删除函数删除该位置的数据,然后再调用插入函数向其中插入一个数据
修改函数运行示例

**删除函数:**代码如下

    void ListDelete(LinkList &L,int i)
    {
    LNode *p=L;
    int j=0;
    //查找第i-1个结点,p指向该结点
    while((p->next)&&(j<i-1))
    {
    p=p->next;
    j++;
    } 
    if((!p->next)||(j>i-1))
      printf("位置错误!");  //i>n或i<1时,删除位置不合理  
    LNode *q=p->next;  //临时保存被删除结点的地址以备释放
    p->next=q->next;//改变删除结点前驱结点的指针域
    delete q;   //释放删除结点的空间
    }

删除函数运行示例

**查找函数:**代码如下

    void GetElem(LinkList L)
    {
    LNode *p=L->next;  //初始化,p指向首元结点
    int j=1,i;
    printf("请输入想要提取元素的位置:");
    scanf("%d",&i);
    while(p&&j<i)//顺链域向后扫描,直到p为空或p指向第i个元素
    {
    p=p->next;//p指向下一个结点
    j++;
    }
    if(!p||j>i)
    printf("取值位置错误!");
    printf("%d\n",p->data);
    }

查找函数运行示例

输出函数:代码如下

    void display(LinkList &L,int n)
    {
    LNode *p;  
    int i=0;
    printf("单链表为:");
    p=L->next;
    while(p)
    {
    printf("%d ",p->data);   //输出第i个结点的数据域
    p=p->next;//p指向下一个结点
    i++;  
    }
    printf("\n");
    printf("链表长度为:%d\n",i);
    }

主函数:

输入项要创建的单链表长度及链表元素,然后通过序号选择想要对链表进行的操作(插入,修改,删除,查找元素),每一项操作的最后都会输出链表被操作之后的元素及长度。

主函数运行示例

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值