单链表的运算

来源:互联网 发布:网店美工用什么软件 编辑:程序博客网 时间:2024/05/08 15:41
#include <iostream>#include <string>#include <cstdlib>#include <malloc.h>using namespace std;typedef struct LNode{    char data;    struct LNode *next;}LinkList;void CreatList(LinkList * &L,char a[],int n){    LinkList *s,*r;    int i;    L=(LinkList *)malloc(sizeof(LinkList));    r=L;    for(i=0;i<n;i++)    {        s=(LinkList *)malloc(sizeof(LinkList));        s->data=a[i];        r->next=s;        r=s;    }    r->next=NULL;}void InitList(LinkList * &L){    L=(LinkList *)malloc(sizeof(LinkList));    L->next=NULL;}void DestroyList (LinkList * &L){    LinkList *pre=L,*p=L->next;    while(p!=NULL)    {        free(pre);        pre=p;        p=pre->next;    }    free(pre);}bool ListEmpty(LinkList *L){    return (L->next==NULL);}int ListLength(LinkList *L){    int n=0;    LinkList *p=L;    while(p->next!=NULL)    {        n++;        p=p->next;    }    return (n);}void DispList(LinkList *L){    LinkList *p=L->next;    while(p!=NULL)    {        cout<<p->data;        p=p->next;    }    cout<<endl;}bool GetElem(LinkList *L,int i,char &e){    int j=0;    LinkList *p=L;    while(j<i&&p!=NULL)    {        j++;        p=p->next;    }    if(p==NULL)        return false;    else    {        e=p->data;        cout<<"第"<<i<<"个元素值为:"<<e<<endl;        return true;    }}int LocateElem(LinkList * L,char e){    int i=1;    LinkList *p=L->next;    while(p!=NULL&&p->data!=e)    {        p=p->next;        i++;    }    if(p==NULL)        return (0);    else        return (i);}bool ListInsert(LinkList * &L,int i,char e){    int j=0;    LinkList *p=L,*s;    while(j<i-1&&p!=NULL)    {        j++;        p=p->next;    }    if(p==NULL)        return false;    else    {        s=(LinkList *)malloc(sizeof(LinkList));        s->data=e;        s->next=p->next;        p->next=s;        return true;    }}bool ListDelete(LinkList * &L,int i,char &e){    int j=0;    LinkList *p=L,*q;    while(j<i-1&&p!=NULL)    {        j++;        p=p->next;    }    if(p==NULL)        return false;    else    {        q=p->next;        if(q==NULL)            return false;        e=q->data;        p->next=q->next;        free(q);        return true;    }}int main(){    LinkList *h;    char a[]={'a','b','c','d','e'};    cout<<"初始化单链表L"<<endl;    InitList(h);    cout<<"采用尾插法一次插入元素abcde:"<<endl;    CreatList(h,a,5);    cout<<"输出单链表:";    DispList(h);    cout<<"单链表的长度为:"<<ListLength(h)<<'\n';    if(ListEmpty(h)==0)        cout<<"单链表不为空!"<<'\n';    else        cout<<"单链表为空!"<<'\n';    char e,ch,sh;    int i,m,x;    cout<<"查找第i个元素,请输入i:";    cin>>i;    cout<<"输出单链表的第"<<i<<"个元素= ";    GetElem(h,3,e);    cout<<"查找ch元素的位置,请输入ch:";    cin>>ch;    cout<<"输出元素"<<ch<<"的位置:"<<LocateElem(h,ch)<<'\n';    cout<<"在第m个位置上插入元素sh,请输入m和sh: ";    cin>>m>>sh;    ListInsert(h,m,sh);    cout<<"在单链表第"<<m<<"个位置上插入元素"<<sh<<"后,输出单链表:";    DispList(h);//同上    cout<<"删除顺序表第x个元素,请输入x:";    cin>>x;    ListDelete(h,x,e);//还是同上    cout<<"删除单链表第"<<x<<"个元素后,输出单链表:";    DispList(h);    cout<<"释放单链表h!";    DestroyList(h);    return 0;}


0 0
原创粉丝点击