链表信息分类问题

来源:互联网 发布:gui table 选中列 java 编辑:程序博客网 时间:2024/05/04 07:05

链表信息分类问题

  1. 主要是把原链表中的元素依次检测并分类插入到新建链表中实现分类,将原链表中的元素取出插入到其他链表的同时删除元素,这样剩下的就是另一类元素了,这样做的空间复杂度不敢说是最低的,但从分类并储存这点来说,空间复杂度应该算是较低的,当然这样做是牺牲了时间复杂度的前提下;(果然还是细节重要啊,一个j++忘记写导致我一段时间怀疑链表删除函数是不是学错了,当然还有一个重点也是容易忽略的:每删除一个节点后应使该节点重新指向原位置,这里我使用了一个前驱节点来实现这个问题)

#include<iostream>#include<stdlib.h>#include<string.h>#include<stdio.h>using namespace std;typedef struct Node{    char data;    Node *next;}Linklist;int Check(char e)//检查字符类型{    if (e >= 'a' && e <= 'z' || e > 'A' && e <= 'Z')        return 1;    else if (e >= '0' && e <= '9')        return 0;    else        return -1;}void Deleted(Linklist *&A, int i)//删除链表元素{    Linklist *p = A, *q;    int j = 0;    while (j != i)    {        p = p->next;        j++;    }    q = p->next;    p->next = q->next;    free(q);}void Insert(Linklist *&L, char e)//尾插法插入元素{    Linklist *t, *p = L;    t = (Linklist *)malloc(sizeof(Linklist));    t->data = e;    while (p->next != NULL)        p = p->next;    p->next = t;    t->next = NULL;}void Displist(Linklist *L)//输出链表{    Linklist *p = L->next;    while (p != NULL)    {        cout << p->data;        p = p->next;    }}int main(){    char w[100];    int i;    Linklist *A, *B, *C, *p, *q, *t;    cin >> w;    A = (Linklist *)malloc(sizeof(Linklist));    A->next = NULL;    p = A;    for (i = 0;i < strlen(w);i++)    {        t = (Linklist *)malloc(sizeof(Linklist));        t->data = w[i];        p->next = t;        p = t;    }    p->next = NULL;    B = (Linklist *)malloc(sizeof(Linklist));    B->next = NULL;    C = (Linklist *)malloc(sizeof(Linklist));    C->next = NULL;    i = 0;    p = A;    q = p->next;    while (q != NULL)    {        if (Check(q->data) == 0)        {            Insert(B, q->data);            Deleted(A, i);            q = p->next;        }        else if (Check(q->data) == 1)        {            Insert(C, q->data);            Deleted(A, i);            q = p->next;        }        else        {            p = p->next;            q = q->next;            i++;        }    }    Displist(B);    cout << endl;    Displist(C);    cout << endl;    Displist(A);    cout << endl;    return 0;}
1 0
原创粉丝点击