数据结构-题目1

来源:互联网 发布:超玩fifaol3数据库 编辑:程序博客网 时间:2024/04/28 03:25
/*一个线性表L采用顺序存储结构,其中所有元素为整数。设计一个算法,删除元素值在[x,y]之间的所有元素。要求算法时间复杂度为O(n),空间复杂度为O(1)。*//*思路:扫描顺序表,重建表L。用k记录顺序表L中等于x到y之间的元素个数,一边扫描L,一边统计k值,并将不为x到y之间的元素前移k个位置,最后修改L的长度。*/#include <iostream>#include <malloc.h>#include <cstdio>#include <cstring>using namespace std;#define MaxSize 100typedef int  ElemType;typedef struct{    ElemType data[MaxSize];    int length;} SqList;void InitList(SqList *&L)  //初始化顺序表L{    L=(SqList *)malloc(sizeof (SqList));    L->length=0;}void ListInsert(SqList *&L,ElemType a[],int n)   //采用尾插法依次插入元素{    for(int i=0; i<n; i++)        L->data[i]=a[i];    L->length=n;}void DispList(SqList *L)         //输出顺序表L{    for(int i=0; i<L->length; i++)        cout<<L->data[i]<<" ";    cout<<endl;}void delNode(SqList *&L,ElemType x,ElemType y){    int k=0,i=0;    while (i<L->length)    {        if(L->data[i]>=x&&L->data[i]<=y)            k++;        else            L->data[i-k]=L->data[i];        i++;    }    L->length=L->length-k;}int main(){    ElemType a[10];    for(int i=0;i<=7;i++)        cin>>a[i];    SqList *L;    InitList(L);    ListInsert(L,a,8);    cout<<"输出顺序表:";    DispList(L);    delNode(L,5,7);    cout<<"输出顺序表:";    DispList(L);    return 0;}



/*一个线性表L采用顺序存储结构,其中所有元素为整数。设计一个算法,将所有小于0的元素移到所有大于0的元素前面,要求算法时间复杂度为O(n),空间复杂度为O(1)。*//*思路:用i和j分别指向顺序表的第一个元素(i=0)和最后一个元素(j=L->length-1)。当i<j时循环:从右向左扫描,找一个关键字小于等于0的data[j],再从左向右扫描,找一个关键字大于0的data[i],将两者进行交换。*/#include <iostream>#include <malloc.h>#include <cstdio>#include <cstring>using namespace std;#define MaxSize 100typedef int  ElemType;typedef struct{    ElemType data[MaxSize];    int length;} SqList;void InitList(SqList *&L)  //初始化顺序表L{    L=(SqList *)malloc(sizeof (SqList));    L->length=0;}void ListInsert(SqList *&L,ElemType a[],int n)   //采用尾插法依次插入元素{    for(int i=0; i<n; i++)        L->data[i]=a[i];    L->length=n;}void DispList(SqList *L)         //输出顺序表L{    for(int i=0; i<L->length; i++)        cout<<L->data[i]<<" ";    cout<<endl;}void move1(SqList *&L){    int i=0,j=L->length-1;    ElemType tmp;    while(i<j)    {        while(i<j&&L->data[j]>0)            j--;        while(i<j&&L->data[i]<=0)            i++;        if(i<j)        {            tmp=L->data[i];            L->data[i]=L->data[j];            L->data[j]=tmp;        }    }}int main(){    ElemType a[10];    for(int i=0; i<=5; i++)        cin>>a[i];    SqList *L;    InitList(L);    ListInsert(L,a,6);    cout<<"输出顺序表:";    DispList(L);    move1(L);    cout<<"输出顺序表:";    DispList(L);    return 0;}

/*设计一个算法,将一个带头节点的数据域依次为a1,a2,...,an(n>=3)的单链表的所有节点逆置,即第一个节点的数据域变为an,...,最后一个节点的数据域变为a1。*//*思路:建立一个新链表,采用头插法将L2中的数据依次存入L1中。*/#include <iostream>#include <malloc.h>#include <cstdio>#include <cstring>using namespace std;typedef char ElemType;typedef struct LNode{    ElemType data;    struct LNode *next;} LinkList;void InitList(LinkList *&L)  //初始化单链表h{    L=(LinkList *)malloc(sizeof (LinkList));    L->next=NULL;}void CreateListR(LinkList *&L,ElemType 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 reverse(LinkList *&L1,LinkList *&L2,int n){    LinkList *s,*t;    L1=(LinkList *)malloc(sizeof(LinkList));    L1->next=NULL;    t=L2->next;    for(int i=0;i<n;i++)    {        s=(LinkList *)malloc(sizeof(LinkList));        s->data=t->data;        s->next=L1->next;        L1->next=s;        t=t->next;    }}void DispList(LinkList *L)         //输出单链表h{    LinkList *p=L->next;    while(p!=NULL)    {        cout<<p->data<<" ";        p=p->next;    }    cout<<endl;}int main(){    ElemType a[10];    for(int i=0; i<=5; i++)        cin>>a[i];    LinkList *L1,*L2;    InitList(L1);    CreateListR(L1,a,6);    cout<<"输出单链表:";    DispList(L1);    reverse(L2,L1,6);    cout<<"输出单链表:";    DispList(L2);    return 0;}


0 0
原创粉丝点击