数据结构-链表操作

#include<iostream>
using namespace std;
 
#define OK 1;
#define ERROR 0;
typedef  int   ElemType;
typedef  int   Status;
 
typedef struct LNode    //定义链表结构体
{
   ElemType data;
   struct LNode *next;
}LNode, *LinkList; 
 
 
Status CreateList_L(LinkList &L,int n)    //创建链表并输入数据
{
   int i;
   LinkList p,q;      //p q :过度指针
   L=new LNode;     //新申请的结点 
   L->next=NULL;      //生成头指针
   q=L; 
   cout<<"please input "<<n<< " numbers";
   for(i=1;i<=n;i++)     
   {
 p=new LNode;     //申请新的结点
    cin>>p->data;
    q->next=p;  // 链表链接
    q=q->next;    // 跳指针
   }
   q->next=NULL;     //生成尾指针
   return OK;
}
 
 
Status Outptlist_L(LinkList L)     //输出链表
{
 LinkList p;        
    p=L->next;   //指向首结点
  if(p==NULL)    //当链表尾空 指示返回空链表
  {
   cout<<"This list is empyt."<<endl;
  }
  while (p!=NULL)  
  {
   cout<<p->data<<" ";    //当链表不为空,输出链表数据
   p=p->next;          // 跳指针
  }
  cout <<endl;
  return OK;
}
 
 
int  Listlength_(LinkList L)   //求链表长度
{ 
  LinkList p;             
  int  n=0;
  p=L->next;      //p指向首结点
  while (p!=NULL)
  {
   n++;             
      p=p->next;   
  }
  return n;
}
 
  
Status GetElem_L(LinkList L,int i,ElemType &e)       //将链表L中第i个元素用e返回
{
 LinkList p;
 int j;
 if (i<1||i> Listlength_(L))  //判断选择的合理性
  return ERROR;
  p=L->next;
  for (j=1;j<i;j++)   //for 循环寻找第i个元素
   p=p->next ;   
   e=p->data;               //用e返回
   return OK;
}
 
 
Status ListInsert_L(LinkList&L,int i,ElemType e)    //  在链表第i个位置插入e
{
LinkList p,S;
int j;
if (i<1||i> Listlength_(L)+1)  //判断选择的合理性
  return ERROR;
if (i==1)  p=L;  //当在第一个元素插入时p指向头指针
else
 p=L->next;     //否则指向首结点
  
for(j=1;j<i-1;j++)
   p=p->next;
S=new LNode;          //申请新的结点
S->data=e;            //将e赋给新的结点
S->next=p->next;        //将新结点与前一个结点的next链接
p->next=S;              //将前一个结点与新节点链接
return OK;
}
 
 
Status ListDelete_L(LinkList&L,int i,ElemType &e)       //删除链表L的第i个元素,并用e返回
{
 LinkList p,q;
 int j;
 if (i<1||i> Listlength_(L))  //判断选择的合理性
  return ERROR;
     p=L->next;
     for(j=1;j<i-1;j++)        //找到第i个元素
  p=p->next;
     q =p->next;        //  q指向p的next
  e=q->data;            // 取q的数据
  p->next=q->next;      //将p的next与q的next链接
  free(q);               //释放指针
  return OK;
}
 
 
 
  void main ()
  { 
  int n,m,k;
     LinkList L1;
     cout <<"please input a umber: ";
  cin>> m;
     CreateList_L(L1,m);
  cout<<"输出列表:";
     Outptlist_L( L1);
     cout<<"The length is  "<< Listlength_(L1)<<endl;
      GetElem_L( L1,3,n);
     cout<<"The number is  "<<n<<endl;
  ListInsert_L(L1,6, 0);
  cout<<"The Insertlist is :  ";
  Outptlist_L( L1);
  ListDelete_L(L1,3,k);
  cout<<"The Deletelist is :  ";
  Outptlist_L( L1);
     cout<<"The Delete number is  "<<k<<endl;
  }

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值