关于单链表的操作,vc6.0下运行!

/*
1.初始化链表;
2.清空单链表;
3.判断单链表是否为空;
4.创建单链表;
5.求单链表的长度;
6.查找单链表中的任意元素;
7.查找指定元素在单链表的位置;
8.向单链表插入元素;
9.删除单链表中的元素;
10.遍历单链表;
*/
#include <iostream.h>
#include <stdio.h>
#include <stdlib.h>
#define ENDKEY -1
typedef struct node{
  int data;
  struct node *next; 
}node,*linkList;
//1.初始化单链表;
linkList initLinkList()
{
  linkList l=(linkList)malloc(sizeof(node));
  if (l==NULL)
  {
 cout<<"链表初始化失败!"<<endl;
  }
  else
  {
 l->next=NULL;
 cout<<"链表初始化成功!"<<endl;
  }
  return l;
}
//2.清空单链表;
void deleteLinkList(linkList l)
{
l->next=NULL;
cout<<"单链表清空成功!"<<endl;
}
//3.判断单链表是否为空!;
bool isEmptyList(linkList l)
{
if (l->next==NULL)
return true;
else
return false;

}
//4.求单链表的长度;
int LengthOfList(linkList l)
{
    int j=0;
while (l->next!=NULL)
{
j++;
l=l->next;
}
return j;
}
//5.创建单链表;
linkList createLinkList()
{
linkList l=initLinkList();
linkList p,r;
r=l;
int x;
cout<<"创建单链表"<<endl;
cout<<"输入单链表的元素(-1结束):";
cin>>x;
while (x!=ENDKEY)
{
p=(linkList)malloc(sizeof(node));
p->data=x;
r->next=p;
r=p;
cin>>x;
}
r->next=NULL;
return l;
}
//6.遍历整个单链表;
void preOrder(linkList l)
{
   linkList p;
   p=l->next;
   if (p==NULL)
   {
  cout<<"单链表为空!"<<endl;
   }
   while (p)
   {
  cout<<p->data<<"\t";
  p=p->next;
   }
   cout<<endl;
}
//7.查找单链表中是否存在值为x的元素,返回其所在的下标值;
void findElementInList(linkList l,int element)
{
int j=1;
linkList p;
p=l->next;
while (p!=NULL&&p->data!=element)
{
p=p->next;
j++;
}
if (p)
{
cout<<"查找成功,下标值为"<<j<<endl;
}
else
cout<<"查找失败!"<<endl;
   
}
//8.根据单链表的下标值进行查询,查找成功,则输出其值,否则,失败;
void  findDataInList(linkList l,int i)
{
int j=1;
linkList p;
p=l->next;
while (p!=NULL&&j<i)
{
p=p->next;
j++;
}
if (j>i||!p)
{
cout<<"查找的位置i错误!"<<endl;
}
cout<<"查找的元素的值为:"<<p->data<<endl;
}
//9.向单链表中插入元素,位置i,值为data;
void insertIntoList(linkList l,int i,int data)
{
linkList p,s;
int j=1;
p=l;
while (p&&j<i)
{
p=p->next;
j++;
}
if (j>i||!p)
{
cout<<"插入的位置错误!"<<endl;
}
s=(linkList)malloc(sizeof(node));
s->next=p->next;
p->next=s;
s->data=data;
cout<<"插入成功!"<<endl;
}
//10.删除单链表下标为i的节点;
void deleteByVlaue(linkList l,int i)
{
linkList p=l,q;
int j=1;
while (p->next&&j<i)
{
p=p->next;
j++;
}
if (!p||j>i)
{
cout<<"要删除的节点不存在!"<<endl;

else
{
q=p->next;
p->next=q->next;
   free(q);
}
cout<<"删除成功!"<<endl;
}
void main()
{
linkList l=createLinkList();
int data,index;
if (isEmptyList(l))
{
cout<<"单链表为空!"<<endl;
}
else
        cout<<"单链表不为空!"<<endl;
cout<<"单链表的长度为:"<<LengthOfList(l)<<endl;
// cout<<"清空单链表!"<<endl;
// deleteLinkList(l);
    cout<<"单链表的长度为:"<<LengthOfList(l)<<endl;
cout<<"遍历整个单链表:";
preOrder(l);
cout<<"请输入要查找的元素的值:";
cin>>data;
findElementInList(l,data);
cout<<"请输入要查找的下标值:";
cin>>index;
findDataInList(l,index);
int insertIndex,insertdata;
cout<<"输入要插入的节点i的位置以及元素的值:";
cin>>insertIndex>>insertdata;
insertIntoList(l,insertIndex,insertdata);
    cout<<"遍历整个单链表:";
preOrder(l);
cout<<"单链表的长度为:"<<LengthOfList(l)<<endl;  
int deleteIndex;
cout<<"输入要删除的节点下标:";
cin>>deleteIndex;
    deleteByVlaue(l,deleteIndex);
cout<<"遍历整个单链表:";
preOrder(l);
cout<<"单链表的长度为:"<<LengthOfList(l)<<endl;  


}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值