数据结构C语言,LT(L.r[i].key, L.r[i-1].key)与L.r[i].key<L.r[i-1].key有什么区别呢

Python012

数据结构C语言,LT(L.r[i].key, L.r[i-1].key)与L.r[i].key<L.r[i-1].key有什么区别呢,第1张

LT可能是个宏定义,展开后和后者没有区别,如果逻辑表达式过长,LT这种看起来能清爽一些。

L.r[i].key一定是能比较大小的

L.r[i]则未必,就是说L.r[i] <L.r[i-1]可能是无法通过编译的,因为两个结构体比较大小是没有定义这种比较的。

#include<iostream> 

using namespace std

#define max 15 

#define NULL 0  

struct llist{  

int e[max]  

int n 

}  

struct node{  

int data  

node *next 

}  

void setnull(llist &lt)  //置线性表lt为空  

lt.n = 0 

}  

void creat(llist &lt)  //输入线性表lt中元素的值 

{

int i

do

{

cout<<"INPUT THE COUNT OF DATA IN LINEAR LINKED LIST h (1<=n<=" << max << ") : "  

cin>>lt.n

}while(lt.n<1 || lt.n>max)

for (i=0i<lt.ni++)

{

cout<<"INPUT THE DATA IN LINEAR LINKED LIST h \t"<< i+1 << " : "

cin>>lt.e[i]

}

}  

void outllist(llist lt)  //输出线性表lt中元素的值   

{  

int i 

cout<<"DATA IN LINEAR LIST lt:\n" 

for(i = 0i < lt.n++i)   

cout<<lt.e[i]<<'\t'

cout<<'\n' 

}  

void error(char err[])  //输出出错信息 

cout<<err<<"出错\n" 

}  

int length(llist lt)  //函数功能为求线性表lt的表长

return lt.n

}  

void getelem(llist lt,int i,int &ai)  //算法功能取第i个元素的值,由ai返回 

{

if (lt.n == 0) 

error("err1")//表空出错  

else if (i < 1 || i > lt.n) 

error("err2")//i值出错   

else ai = lt.e[i - 1] 

}  

void create(llist lt,node *&h)  //算法功能由线性表lt建立h指向链表 

{  

int i

node *p, *q

if (lt.n < 1)

{

h = NULL

return

}

else

{

h = new node()

h->data = lt.e[0]

h->next = NULL

}

q = h

for(i = 1i < lt.n++i)   

{

p = new node()

p->data = lt.e[i]

p->next = NULL

q->next = p

q = p

}

}  

void outllink(node *h)  //输出h指向链表中的结点数据 

node *p 

p = h

cout<<"DATA IN LINEAR LINKED LIST h:\n"  

while(p)

cout<<p->data<<'\t'   

p = p->next 

cout<<'\n'

}  

void insert_llink(node *&h,int ai,int x)  //线性链表插入算法 

node *i,*p,*q 

i = new node 

i->data = x 

if(h == NULL)  

error("err1")//链表为空   cout<<"链表空"<<'\n' 

else

{

if(h->data == ai)

{  

i->next = h

h = i 

else{    

p = h 

while(p->data != ai && p->next != NULL)

{   

q = p 

p = p->next   

if(p->data == ai)

{      

q->next = i   

i->next = p   

else 

error("err2")//未找到数据域值为ai的结点   

}  

}

void delete_llink(node *&h,int x)  //线性链表删除算法 

node *p,*q

if(h == NULL) 

error("err1")//表空出错  

else if(h->data == x)

{  

p = h 

h = h->next 

p ->next = NULL 

delete(p)//由系统收回结点存储空间 

else

{  

p = h 

while(p->data != x && p->next != NULL)

{     

q = p 

p = p->next 

if (p->data == x){    

q->next = p->next    

p->next = NULL 

delete(p)//由系统收回结点存储空间 

else 

error("err2")//未找到数据域值等于x的结点  

}

void main(void)

llist lt 

node *h 

char c  

int ai,x 

cout<<" * * * THE PROGRAM FOR LINEAR LINKED LIST * * *\n" 

setnull(lt)  

creat(lt)  

outllist(lt)

h=NULL 

create(lt,h) 

outllink(h) 

do{ 

cout<<"TO SELECT COMMAND(I,D,O,E)\n\t" 

cout<<"COMMAND:"

cin>>c 

switch(c){ 

case 'I':cout<<"TO INSERT NEW ELEMENT IN THE LINEAR LINKED LIST h\n" 

cout<<"VALUE OF THE ELEMENT(ai) = "    

cin>>ai 

cout<<"VALUE OF NEW ELEMENT(x) = "   

cin>>x 

insert_llink(h,ai,x)

outllink(h)      

break 

case 'D':cout<<"TO DELETE ELEMENT IN THE LINEAR LINKED LIST h\n" 

cout<<"VALUE OF THE ELEMENT(x) = "     

cin>>x 

delete_llink(h,x)  

outllink(h)     

break 

case 'O':cout<<"ELEMENT OF LINEAR LINKED LIST h READS AS FOLLOWS\n"     

outllink(h)      

break   

case 'E':

break 

default:

error("命令字")  

}

while(c != 'E')  

}