码迷,mamicode.com
首页 > 其他好文 > 详细

D_S 单链表的基本操作

时间:2015-12-03 00:43:00      阅读:182      评论:0      收藏:0      [点我收藏+]

标签:

//  main.cpp

#include <iostream>

using namespace std;

#include "Status.h"

#include "LinkList.h"

 

int main()

{

    LinkList L;

    int n,i;

    ElemType e;

    InitList(L);

    cout<<"\nL=";

    ListTraverse(L);

    cout<<"\n请设置将向线性表L中输入的元素个数:";

    cin>>n;

    CreateList(L,n);

    cout<<"\nL=";

    ListTraverse(L);

    cout<<"\nL的表长为:"<<ListLength(L)<<endl;

    cout<<"\n请输入想要获取的元素位序:";

    cin>>i;

    if(GetElem(L,i,e)) cout<<"\n第"<<i<<"个元素为:"<<e<<endl;

    else cout<<"\n第"<<i<<"个元素不存在!"<<endl;

    cout<<"\n请输入要查找的元素:";

    cin>>e;

    if((i=(LocateElem(L,e)))) cout<<"\n元素"<<e<<"的位置为:"<<i<<endl;

    else cout<<"\n元素"<<e<<"不存在!"<<endl;

    cout<<"\n请输入插入位置和所插入元素:";

    cin>>i>>e;

    if(ListInsert(L,i,e))

    {

        cout<<"\nL=";

        ListTraverse(L);

    }

    else cout<<"\n插入操作失败!"<<endl;

    cout<<"\n请输入被删元素的位置:";

    cin>>i;

    if(ListDelete(L,i,e)) cout<<"\n被删元素为:"<<e<<endl;

    else cout<<"\n删除操作失败!"<<endl;

    cout<<"\nL=";

    ListTraverse(L);

    return 0;

}

 

// Status.h

#ifndef yuan_Status_h

#define yuan_Status_h

#define TRUE 1

#define FALSE 0

#define OK 1

#define ERROR 0

#define INFEASIBLE -1

#define OVERFLOW -2

typedef int Status;

typedef int ElemType;

#endif

 

//  LinkList.h

#ifndef yuan_LinkList_h

#define yuan_LinkList_h

 

typedef struct LNode{

    ElemType data;   //结点的数据域

    struct LNode *next;  //结点的指针域

}LNode,*LinkList;  //LinkList为指向结构体LNode的指针类型

 

//1.单链表的初始化

Status InitList(LinkList &L)

{    //构造一个空的单链表

    L=new LNode;   //生成新结点作为头结点,用头指针L指向头结点

    L->next=NULL;  //头结点的指针域制空

    return OK;

}

 

//2.单链表的创建

//2.1前插法创建单链表

void CreateList(LinkList &L,int n)

{//逆位序输入n个元素的值,创建带头结点的单链表L

    L=new LNode;

    LinkList p;

    L->next=NULL; //先建立一个带头结点的空链表

    cout<<"\n请输入"<<n<<"个元素:";

    for (int i=n; i>0; i--) {

        p=new LNode;  //生成新结点

        cin>>p->data;  //输入元素值

        p->next=L->next; L->next=p; //插入到表头

    }

}

 

//3.单链表的遍历

void ListTraverse(LinkList L)

{

    LinkList p=L->next;

    while(p) {

        cout<<p->data<<"  ";

        p=p->next;

    }

    cout<<endl;

}

 

//4.单链表的长度

Status ListLength(LinkList L){

    LinkList p;int j=0;

    p=L->next;

    while(p) {

        j++;

        p=p->next;

    }

    return j;

}

 

//5.单链表的插入

Status ListInsert(LinkList &L,int i,ElemType e)

{

    LinkList p=L,s; int j=0;

    while (p&&j<i-1) {p=p->next;++j;}

    if (!p||j>i-1)  return ERROR;

    s=new LNode;

    s->data=e;

    s->next=p->next;

    p->next=s;

    return OK;

}

 

//6.单链表的删除

Status ListDelete(LinkList &L,int i,ElemType &e)

{

    LinkList p=L,q;int j=0;

    while (p->next&&j<i-1){p=p->next;++j;}

    if (!(p->next)||j>i-1) return ERROR;

    q=p->next;

    p->next=q->next;

    delete p;

    return OK;

}

 

//7.单链表的按序号查找

Status GetElem(LinkList L,int i,ElemType &e)

{//在带头结点的单链表L中查找第i个元素

    LinkList p;int j=1;p=L->next;   //初始化,p指向第一个结点,j为计数器

    while (p&&j<i) {p=p->next;++j;}

    if (!p||j>i) return ERROR;  //第i个元素不存在

    e=p->data;   //取第i个元素

    return OK;

}

 

//8.单链表的按值查找

Status LocateElem(LinkList L,ElemType e)

{

    LinkList p;int j=1;

    p=L->next;

    while (p&&j<=ListLength(L)) {

        if(p->data==e) return j;

        p=p->next;++j;

    }

    if (!p||j>ListLength(L)) return ERROR;

    return OK;

}

 

////8.单链表的按值查找

//LNode *LocateElem(LinkList L,ElemType e)

//{

//    LinkList p=L->next;

//    while (p&&p->data!=e)

//        p=p->next;

//    return p;

//}

 

#endif

 

D_S 单链表的基本操作

标签:

原文地址:http://www.cnblogs.com/YuanYe1/p/5014671.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!