目录
位置:第二章: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;
}
关于链表的销毁与清空,详见:
求表长:
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;
}
下一讲,我们来正式开始讲讲关于(单)链表的一些较为复杂的操作