该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
#include
#define max 15
#define NULL 0
struct llist{
int e[max];
int n;
};
struct node{
int data;
node *next;
};
void setnull(llist
{
lt.n = 0;
}
void creat(llist
{int i,d;
i = 0;
cout<
cout<
cin>>d;
while (d != -1){
lt.e[i++] = d;
++lt.n;
cin>>d;
}
}
void outllist(llist lt) //输出线性表lt中元素的值
{
int i;
cout<
for(i = 0;i < lt.n;++i)
cout<
cout<
}
void error(char err[]) //输出出错信息
{
cout<
}
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指向链表
{
}
void outllink(node *h) //输出h指向链表中的结点数据
{
node *p;
p = h;
cout<
while(p){
cout<data<
p = p->next;
}
cout<
}
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<
}
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<
setnull(lt);
creat(lt);
outllist(lt);
h=NULL;
create(lt,h);
outllink(h);
do{
cout<
cout<>c;
switch(c){
case 'I':cout<
cout<
cin>>ai;
cout<
cin>>x;
insert_llink(h,ai,x);
outllink(h);
break;
case 'D':cout<
cout<
cin>>x;
delete_llink(h,x);
outllink(h);
break;
case 'O':cout<
outllink(h);
break;
case 'E':break;
default:error("命令字");
}
}
while(c != 'E');
}