用户注册



邮箱:

密码:

用户登录


邮箱:

密码:
记住登录一个月忘记密码?

发表随想


还能输入:200字
云代码 - c++代码库

单链表的基本运算

2017-09-29 作者:芙蓉妹妹举报

[c++]代码库

#include <iostream>
#include <stdio.h>
using namespace std;

typedef char ElemType;
typedef int Status;
typedef struct LNode
{
    ElemType data;
    struct LNode *next;
}LNode,*LinkList;
Status InitList(LinkList &L)//初始化链表
{
    L=new LNode;
    L->next=NULL;
    cout<<L->next<<endl;
    return 1;
}
Status ListCreate_L(LinkList &L,int n)//尾插法插入元素
{
    LNode *rearPtr,*curPtr;   //一个尾指针,一个指向新节点的指针
    rearPtr=L;  //初始时头结点为尾节点,rearPtr指向尾巴节点
    for (int i=1;i<=n;i++){  //每次循环都开辟一个新节点,并把新节点拼到尾节点后
        curPtr=new LNode;//生成新结点
        cin>>curPtr->data;//输入元素值
        curPtr->next=NULL;  //最后一个节点的next赋空
        rearPtr->next=curPtr;
        rearPtr=curPtr;
    }
    return 1;
}
void ListPrint_L(LinkList &L)//输出单链表
{
    LNode *p=L->next;  //p指向第一个元素结点
    while(p)
    {
          if(p->next!=NULL)
               cout<<p->data<<" ";
          else
               cout<<p->data;
          p=p->next;
    }
    cout<<endl;
}
void ListLength_L(LinkList &L)//长度
{
    int len=0;
    LNode *p=L->next;
    while(p)
    {
        len++;
        p=p->next;
    }
    cout<<len<<endl;
}
void EmptyList_L(LinkList &L)//判断单链表是否为空
{
    LNode *p =L->next;
    if(p)
        cout<<"no"<<endl;
    else
        cout<<"yes"<<endl;
}
void GetElem(LinkList &L,int a)//单链表取值
{
    LNode *p=L->next;
    int j=1;
    while(p&&j<a)
    {
        p=p->next;
        j++;
    }
    cout<<p->data<<endl;
}
void GetAdr(LinkList &L,ElemType c)//找元素的位置
{
    LNode *p=L->next;
    int i=1;
    while(p)
    {
       if(p->data==c)
       {
           cout<<i<<endl;
           break;
       }
       else
       {
           i++;
           p=p->next;
       }
    }
}
void ListInsert(LinkList &L,int i,ElemType e)//插入一结点
{
    LNode *p=L->next;
    int j=1;
    while(p&&(j<i-1))
    {
        p=p->next;
        j++;
    }
    LNode *s;
    s=new LNode;
    s->data=e;
    s->next=p->next;
    p->next=s;
}
void ListDelete(LinkList &L,int i)//删除某一结点
{
    LNode *p=L->next,*q;
    int j=1;
    while((p->next)&&(j<i-1))
    {
        p=p->next;
        j++;
    }
    q=p->next;
    p->next=q->next;
    delete q;
}
void  ListClear(LinkList &L)//释放链表
{
    LNode *p;
    while(L->next)
    {
        p=L->next;
        L->next=p->next;
        delete p;
    }
}
int main()
{
    LinkList L;
    InitList(L);
    int n;
    cin>>n;
    ListCreate_L(L,n);
    ListPrint_L(L);
    ListLength_L(L);
    EmptyList_L(L);
    GetElem(L,3);
    GetAdr(L,'a');
    ListInsert(L,4,'x');
    ListPrint_L(L);
    ListDelete(L,3);
    ListPrint_L(L);
    ListClear(L);
    return 0;
}


分享到:
更多

网友评论    (发表评论)


发表评论:

评论须知:

  • 1、评论每次加2分,每天上限为30;
  • 2、请文明用语,共同创建干净的技术交流环境;
  • 3、若被发现提交非法信息,评论将会被删除,并且给予扣分处理,严重者给予封号处理;
  • 4、请勿发布广告信息或其他无关评论,否则将会删除评论并扣分,严重者给予封号处理。