该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
/*
1.建立一个带头结点的单向链表。
2.遍历单向链表。
3.对单向链表进行插入操作。
4、对单向链表进行删除操作。
5.编写一个主函数,调试上述算法
*/
#include
#include
struct LNode
{
int data;
LNode *next;
};
void InitLink(LNode * &hl)//初始化带头结点的链表
{
hl=new LNode;
hl->next =NULL;
}
//这个子函数有问题,值没有存到链表中,各位帮忙看看
void inputLink(LNode * &hl)//为链表输入值
{
LNode *p;
int i;
p=hl->next;
cout<
for(i=1;i<6;i++)
{
p= new LNode;
printf("输入第%d个数据:\n",i);
cin>>p->data;
p=p->next;
}
p->next=NULL;
}
void displaylink(LNode *hl)//遍历单向链表
{
LNode *p;
int i;
p=hl->next; i=1;
if(p==NULL)
{
printf("线性表中没有元素\n");
printf("\n");
return ;
}
while(p!=NULL)
{
printf("第%d个元素=%d\n",i,p->data);
i++;
p=p->next;
}
printf("\n");
}
bool InsertLink(LNode *hl,int item,int pos)//对单向链表进行插入操作
{
LNode *p,*q;
int j;
cout<
if(pos<1)
{
cout<
return false;
}
j=0; p=hl;
while((p!=NULL)&&(j
{
p=p->next ;
j++;
}
if(p==NULL)
{
printf("位置无效\n");
return false;
}
q=new LNode;
q->data =item;
q->next =p->next ;
p->next =q;
return true;
}
bool DeleteLink(LNode *hl,int pos)//对单向链表进行删除操作
{
LNode *p,*q;
int j;
cout<
if(pos<1)
{
cout<
return false;
}
j=0;
p=hl;
while((p->next!=NULL)&&(j
{
p=p->next;
j++;
}
if(p->next==NULL)
{
cout<
return false;
}
q=p->next;
p->next=q->next;
delete q;
return true;
}
void main()
{
LNode *h;
int pos=4;
int item=3;
cout<
InitLink(h);
inputLink(h);
displaylink(h);
printf("将数据%d插入位子%d:\n",item,pos);
InsertLink(h,3,4);
cout<
displaylink(h);
printf("删除数据%d位子%d:\n",item,pos);
DeleteLink(h,3);
}