现在的位置: 首页 > 综合 > 正文

线性表的基本操作

2018年02月23日 ⁄ 综合 ⁄ 共 1253字 ⁄ 字号 评论关闭

顺序表—线性表的顺序实现删除多余元素

#include<iostream>
#include<stdlib.h>
using namespace std;
struct node
{
    int n[100];
    int length;
    int tag;
}a;
void init()
{
    int i;
    for(i=0;i<30;i++)
    {
        a.n[i]=rand()%10;
        a.length++;
    }
}
void display(int n)
{
    int i;
    for(i=0;i<n;i++)
    cout<<a.n[i]<<" ";
    cout<<endl;
}
int find(int num)
{
    int i;
    for(i=0;i<a.tag;i++)
    if(a.n[i]==num)
    return 1;
    return 0;
}
void del()
{
    int i;
    for(i=0;i<30;i++)
    {
        if(!find(a.n[i]))
        a.n[a.tag++]=a.n[i];
    }
}
int main()
{
    init();
    display(30);
    del();
    display(a.tag);
    return 0;
}

链表——链表实现删除多余元素

#include<iostream>
#include<stdlib.h>
using namespace std;
typedef struct s
{
    int data;
    struct s *next;
}list;
list *head2,*tail;
void insert(list *l,int n)
{
    list *p;
    p=new list;
    p->data=n;
    p->next=l->next;
    l->next=p;
}
void display(list *l)
{
    list *p;
    p=l->next;
    while(p!=NULL)
    {
        cout<<p->data<<" ";
        p=p->next;
    }
    cout<<endl;
}
int find(int n)
{
    list *p;
    p=head2->next;
    while(p!=NULL)
    {
        if(p->data==n)
        return 1;
        p=p->next;
    }
    return 0;
}
void del(list *l)
{
    list *p,*q;
    p=l;
    while(p->next->next!=NULL)
    {
        if(!find(p->next->data))
        {
            q=p->next;
            p->next=q->next;
            q->next=NULL;
            tail->next=q;
            tail=q;
        }
        else
        p=p->next;
    }
    if(!find(p->next->data))
    {
        q=p->next;
        q->next=NULL;
        tail->next=q;
        tail=q;
    }
}
int main()
{
    int i;
    list *head1;
    head1=new list;
    head2=new list;
    head1->next=NULL;
    head2->next=NULL;
    tail=head2;
    for(i=1;i<=30;i++)
    insert(head1,rand()%10);
    display(head1);
    del(head1);
    display(head2);
}

抱歉!评论已关闭.