链表操作

来源:互联网 发布:notepad 安装sql插件 编辑:程序博客网 时间:2024/05/01 03:50
编程实现单链表的以下基本操作:建立单链表,查找单链表,插入单链表,删除单链表。

#include <iostream>#include <stdio.h>#include <stdlib.h>#define TRUE 1#define FALSE 0#define OK 1#define ERROR 0#define INFEASIBLE -1#define OVERFLOWusing namespace std;typedef int ElemType;typedef int Status;typedef struct LNode{   ElemType data;   struct LNode *next;}LNode,*LinkList;void CreatList_L(LinkList &L,int n){    L=(LinkList)malloc(sizeof(LNode));    L->next=NULL;    LinkList p;    for(int i=n;i>0;i--)    {        p=(LinkList)malloc(sizeof(LNode));        cin>>p->data;        p->next=L->next;        L->next=p;    }}Status ListInsert_L(LinkList &L,int i,ElemType e){    LinkList p;    p=L;    int j;    j=0;    while(p&&j<i-1)    {        p=p->next;        j++;    }    if(!p||j>i-1)        return ERROR;    LinkList s;    s=(LinkList)malloc(sizeof(LNode));    s->data=e;    s->next=p->next;    p->next=s;    return OK;}Status ListDelete_L(LinkList &L,int i,ElemType &e){    LinkList p,q;    p=L;    int j;    j=0;    while(p&&j<i-1)    {        p=p->next;        j++;    }    if(!(p->next)||j>i-1)        return ERROR;    q=p->next;    p->next=q->next;    e=q->data;    free(q);    return OK;}Status List_Alter(LinkList &L,int i,int j,ElemType &e){    //把第i个元素的值改为j,并用e保存原来第i个元素的值    LinkList p;    p=L;    int ele=0;    while(p&&ele<i)    {        p=p->next;        ele++;    }    if(!p||ele>i)        return ERROR;    e=p->data;    p->data=j;    return OK;}Status List_Search(LinkList &L,int i,ElemType &e){//查找第i个元素,并用e返回其值    LinkList p;    p=L;    int j=0;    while(p)    {        p=p->next;        j++;        if(j==i)            break;    }    if(!p)        return ERROR;    e=p->data;    return OK;}void getLinkList(LinkList &L){    LinkList p;    p=L->next;    cout<<"当前链表:"<<endl;    while(p)    {        cout<<p->data<<" ";        p=p->next;    }    cout<<endl;}int main(){    LinkList L;    int n,e;    cout<<"请输入链表长度:"<<endl;    cin>>n;    cout<<"请逆序输入n个元素的值:"<<endl;    CreatList_L(L,n);    getLinkList(L);    cout<<"请输入查找元素的位置:"<<endl;    int i;    cin>>i;    if(List_Search(L,i,e))    {        cout<<"该元素的值为:"<<e<<endl;    }    else    {        cout<<"查找失败!"<<endl;    }    cout<<"请输入想插入元素的位置:"<<endl;    int j;    cin>>j;    cout<<"插入元素的值为:"<<endl;    int p;    cin>>p;    if(ListInsert_L(L,j,p))    {        cout<<"插入成功!"<<endl;        getLinkList(L);    }    else    {        cout<<"插入失败!"<<endl;        getLinkList(L);    }    cout<<"请输入想要删除元素的位置:"<<endl;    int q;    cin>>q;    if(ListDelete_L(L,q,e))    {        cout<<"删除成功!"<<endl;        cout<<"删除元素的值为:"<<e<<endl;        getLinkList(L);    }    else    {        cout<<"删除失败!"<<endl;        getLinkList(L);    }    cout<<"请输入想要修改元素的位置:"<<endl;    int k;    cin>>k;    cout<<"请输入想要修改元素的值:"<<endl;    int l;    cin>>l;    if(List_Alter(L,k,l,e))    {        cout<<"修改成功!"<<endl;        cout<<"原来元素的值为:"<<e<<endl;        getLinkList(L);    }    else    {        cout<<"修改失败!"<<endl;        getLinkList(L);    }    return 0;}
0 0