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')
}