数据结构之链表各功能的实现

来源:互联网 发布:屏幕录制软件ios 编辑:程序博客网 时间:2024/06/01 08:19
#include<stdio.h>
#include<malloc.h>
//#include<algorithm>
//using namespace std;

typedef struct linknode{
    char data;
    struct linknode *next;
}node,*linklist;
node *p;
node *head;
int n;          //记录表长
void creat()   //建表
{
    char x;
    node *s,*r;
    head=(node*)malloc(sizeof(node));
    r=head;
    head->data='#';
    //r->data='#';
    printf("\t请输入链表元素(以字符#结束):");
    while(scanf(" %c",&x),x!='#')
    {
        s=(node*)malloc(sizeof(node));
        n++;
        s->data=x;
        r->next=s;
        r=s;
    }
    r->next=NULL;
}
void print()
{
    node *s,*r;
    r=head;
    printf("\t表中元素为:");
    if(n==0)
    {
        printf("\t链表为空,请先输入元素!\n\n");
        return ;
    }
    while(r->next!=NULL)
    {
        s=r->next;
        printf("%c ",s->data);
        r=s;
    }
    printf("\n\n");

}
void linklenth()
{
    printf("\t表长为:%d\n\n",n);
}
void inslink()      //插入
{
    char m;
    char x;
    printf("\t请输入插入元素的位置:");
    scanf(" %c",&m);
    if(n==0)
    {
        printf("\t链表为空,指令无法进行!!!\n\n");
        return ;
    }
    printf("\t请输入要插入的元素:");
    scanf(" %c",&x);
    node *s,*r,*y;
    r=head;
    while(r->next!=NULL)
    {
        s=r->next;
        if(s->data==m)
            break;
        r=s;
    }
    if(s->data!=m)
    {
        printf("\t输入位置有误!请重新输入~\n\n");
        return ;
    }
    y=(node*)malloc(sizeof(node));
    y->data=x;
    y->next=s->next;
    s->next=y;
    n++;
    return ;
}
void dellink()
{
    printf("\t请输入需要删除的元素:");
    char m;
    scanf(" %c",&m);
    node *s,*r;
    r=head;
    if(n==0)
    {
        printf("\t链表为空,无法删除\n\n");
        return ;
    }
    while(r->next!=NULL)
    {
        s=r->next;
        if(s->data==m)
            break;
        r=s;
    }
    if(s->data!=m)
    {
        printf("\t要删除的元素不存在,请重新输入~\n\n");
        return ;
    }
    r->next=s->next;
    free(s);
    n--;
    return ;
}
void searchlink()
{
    int i=0;
    char x;
    int num=0;
    printf("\t请输入要查找的元素:");
    scanf(" %c",&x);
    node *s,*r;
    r=head;
    printf("\t要查找的元素位置为:");
    if(n==0)
    {
        printf("\t链表为空,无法查找\n\n");
        return ;
    }
    while(r->next!=NULL)
    {
        i++;
        r=r->next;
        if(r->data==x)
        {
            printf("%d ",i);
            num++;
            break;
        }
    }
    if(num==0){
        printf("查找失败,元素不存在");
    }
    printf("\n\n");
}
void clearlink()
{
    node *s,*r;
    r=head;
    if(n==0)
        return ;
    while(r->next!=NULL)
    {
        s=r->next;
        free(r);
        r=s;
    }
    n=0;
}
int main ()
{
    char m=1;
    printf("\t\t\t----链表的程序实现----\n\n");
    while(m!=0)
    {
        printf("\n\t\t******************************************\n");
        printf("\t\t*               指令说明                 *\n");
        printf("\t\t*               1:建表                   *\n");
        printf("\t\t*               2:显示表                 *\n");
        printf("\t\t*               3:求表长                 *\n");
        printf("\t\t*               4:插入(后插)           *\n");
        printf("\t\t*               5:删除                   *\n");
        printf("\t\t*               6:按值查找               *\n");
        printf("\t\t*               0:返回                   *\n");
        printf("\t\t******************************************\n\n");
        printf("\t请输入指令:");
        scanf(" %c",&m);
        switch(m)
        {
            case '1':n=0;creat();break;
            case '2':print();break;
            case '3':linklenth();break;
            case '4':inslink();break;
            case '5':dellink();break;
            case '6':searchlink();break;
            case '0':clearlink();return 0;
            default :printf("\t输入有误!请重新输入~\n\n");break;
        }
    }
    return 0;
}

原创粉丝点击