数据结构与算法基础(王卓)(4):关于(单)链表的一般操作(初始化<结构整理>;检查是否为空;链表的销毁与清空;求表长)

目录

初始化

检查是否为空

关于链表的销毁与清空,详见:

 求表长:


位置:第二章:PPT:115;


typedef int Status;         //函数调用状态
typedef K Elemtype;         //函数调用状态

struct K
{
    float a;
    int b;
    string c;
};
struct Lnode
    //node:结; 结点;
{
    Elemtype data;
    Lnode* next;
};
typedef Lnode* LinkList;

关于链表我们设立的默认前置条件:

#include<iostream>
using namespace std;
#include<stdlib.h>//存放exit

#define TRUE        1
#define FALSE       0
#define OK          1
#define ERROR       0
#define INFEASIBLE  -1
#define OVERFLOW   -2   

#define MAXlength 100  //初始大小为100,可按需修改


struct Poly
{
    float p;
    int e;
};

struct Sqlist
{
    Poly* elem;
    int length;
};

typedef int Status;         //函数调用状态

struct K
{
    float a;
    int b;
    string c;
};
typedef K Elemtype;         //函数调用状态

struct Lnode
    //node:结; 结点;
{
    Elemtype data;
    Lnode* next;
};
typedef Lnode* LinkList;

int main()
{

}

注意:语句:typedef K Elemtype;  必须放在struct K定义之后,程序才能正常运行,否则(如果放在其之前):

 虽然这个报错乱七八糟的我也不知道他在搞什么鸡毛

从这里我们也可以看出,如果每次在设计链表之前都需要进行如此冗长的前置条件,那未免过于麻烦

为了和我们之前学习C++一样(正常一点),我们对默认前置条件进行如下改动:

#include<iostream>
using namespace std;
#include<stdlib.h>//存放exit  
#include<math.h>//OVERFLOW,exit

#define MAXlength 100  //初始大小为100,可按需修改

typedef int Status;         //函数调用状态

struct K
{
    float a;
    int b;
    string c;
};
typedef K Elemtype;         //函数调用状态

struct Lnode
    //node:结; 结点;
{
    Elemtype data;
    Lnode* next;
};
typedef Lnode* LinkList;

int main()
{

}

结构如下:

​​​​​​​


然后对链表开始定义如下基础操作: 

初始化

Status 初始化空单链表(LinkList L)
{//等价于Lnode *&L
    L=new Lnode;
    L->next = NULL;
    return true;
}

检查是否为空

Status 链表是否为空(LinkList L)
{
    if (L->next)
        return true;
    else
        return false;
}

关于链表的销毁与清空,详见:

数据结构(王卓)(4)附:链表的销毁与清空


 求表长:

Status 求表长(LinkList L)
{
    if (链表是否为空(L))
        cerr << "链表为空" << endl;
    LinkList p = L->next;
    //特别注意:因为这里从首元结点开始算起(计算)
    //所以:L->next;
    int i = 0;
    while (p)//不要写成if
    {
        p = p->next;
        i++;
    }
    //cout << "表长为:  " << i << endl;
    return i;
}

下一讲,我们来正式开始讲讲关于(单)链表的一些较为复杂的操作

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值