数据结构上机实验:单链表操作

来源:互联网 发布:电脑网络连接不上 编辑:程序博客网 时间:2024/05/20 06:51
#include <iostream>#include <malloc.h>using namespace std;typedef struct Node{    char c;    struct Node *next;}*LinkList,LNode;//初始化单链表hLinkList Init(LinkList &h){    h=(LNode*)malloc(sizeof(LNode));    if(h==NULL)    {        cout<<"没有足够的内存空间"<<endl;        exit(0);    }    h->next=NULL;    return h;}//尾差法插入元素void InsertNum(LinkList &h,int n){    LinkList r,s;    r=h;    for(int i=0;i<n;i++)    {        s=(LNode*)malloc(sizeof(LNode));        r->next=s;        cin>>s->c;        r=s;    }    r->next=NULL;}//输出单链表hvoid outputLinkList(LinkList h){    LinkList p=h->next;    while(p!=NULL)    {        cout<<p->c<<" ";        p=p->next;    }}//求单链表h的长度int GetLength(LinkList h){    LinkList p;    p=h->next;    int count=0;    while(p!=NULL)    {        count++;        p=p->next;    }    return count;}//输出单链表的长度void outputListLength(LinkList h){    cout<<"当前链表的长度为: "<<GetLength(h)<<endl;}//判断单链表h是否为空表void Empty(LinkList h){    if (h->next==NULL)        cout<<"该链表为空!"<<endl;    else        cout<<"该链表不为空!"<<endl;}//输出单链表h的第n个元素void outputNthNum(LinkList h,int n){    int curLen=GetLength(h);    if(n<=0||n>curLen)    {        cout<<"位置输入错误!"<<endl;        exit(0);    }    else    {        LinkList p=h->next;        for(int i=1;i<n;i++)        {            p=p->next;        }        cout<<"该链表的第"<<n<<"个元素为: "<<p->c<<endl;    }}//输出元素a的位置void outputNumPosition(LinkList h,char a){    LinkList p=h->next;    int position=1;    while(p!=NULL)    {        if(p->c==a)        {            cout<<"元素"<<a<<"在链表中的位置为 :"<<position<<endl;        }        p=p->next;        position++;    }    if(position-GetLength(h)>1)        cout<<"元素"<<a<<"在链表中不存在!"<<endl;}//在第N个位置上插入元素fvoid InsertNumOnth(LinkList &h,int n,char a){    int len=GetLength(h);    if(n<=0||n>len)    {        cout<<"位置错误,不能插入!"<<endl;        exit(0);    }    else    {        LinkList p=h->next;        LinkList temp;        temp=(LNode*)malloc(sizeof(LNode));        if(n==1)        {            temp->next=p;            h->next=temp;            temp->c=a;        }        else        {            for(int i=2;i<n;i++)            {                p=p->next;            }            temp->next=p->next;//3            p->next=temp;            temp->c=a;        }    }}//删除链表的第n个元素void deleteNthNum(LinkList &h,int n){    if(n<=0||n>GetLength(h))    {        cout<<"删除位置输入错误!"<<endl;        exit(0);    }    else    {       int j=0;       LinkList p=h,q;       while(j<n-1&&p!=NULL)       {           j++;           p=p->next;       }       q=p->next;       p->next=q->next;       free(q);    }}//释放链表void freeList(LinkList &h){    free(h);}int main(){    LinkList h;    cout<<"欢迎进入单链表操作程序,本程序提供以下操作:"<<endl;    cout<<endl;    cout<<"1.初始化链表           2.插入n个元素           3.输出单链表"<<endl;    cout<<"4.输出单链表的长度     5.输出链表的第n个元素   6.输出元素a的位置"<<endl;    cout<<"7.判断链表是否为空     8.在第n个位置插入元素f  9.删除第n个元素"<<endl;    cout<<endl;    cout<<"输入数字1~8选择您的操作,输入0退出本系统!(为保证程序顺利运行,已默认执行初始化操作)"<<endl;    cout<<"请输入数字:"<<endl;    int op;    Init(h);    while(cin>>op&&op)    {        switch(op)        {        case 2:            {                int n;                cout<<"输入n的值:";cin>>n;                cout<<"输入插入的n个数的值:";                InsertNum(h,n);                cout<<"插入成功!"<<endl;                break;            }        case 3:            {                cout<<"当前链表为:"; outputLinkList(h);                cout<<endl;break;            }        case 4:            {                outputListLength(h);break;            }        case 5:            {                int n;                cout<<"输入n的值:";cin>>n;                outputNthNum(h,n);break;            }        case 6:            {                char a;                cout<<"输入a的值:";cin>>a;                outputNumPosition(h,a);break;            }        case 7:            {                Empty(h);break;            }        case 8:            {                int n;char f;                cout<<"输入n的值: ";cin>>n;                cout<<"输入f的值: ";cin>>f;                InsertNumOnth(h,n,f);                cout<<"插入成功!"<<endl;                break;            }        case 9:            {                int n;                cout<<"输入n的值: ";cin>>n;                deleteNthNum(h,n);                cout<<"删除成功!"<<endl;                break;            }        }    }    return 0;}


运行:

 

0 0
原创粉丝点击