zoukankan      html  css  js  c++  java
  • 顺序表(存在问题)

    #include <iostream>
    using namespace std;
    typedef int DataType;
    
    struct SeqList
    {
        int MAXNUM;
        int n;
        DataType *element;
    };
    typedef struct SeqList *PSeqList;
    
    PSeqList createEmptySeq(int m)
    {
        PSeqList palist = (PSeqList) malloc (sizeof (struct SeqList));
        if(palist !=NULL)
        {
            palist->element = (DataType*) malloc (sizeof(DataType)*m);
            if(palist->element)
            {
                palist->MAXNUM = m;
                palist->n = 0;
                return palist;
            }
            else
                free(palist);
        }
        cout<<"Out of space"<<endl;
        return NULL;
    }
    
    int isNULLSeq(PSeqList palist)
    {
        return (palist->n == 0);
    }
    
    //寻找x的下标
    int locateSeq(PSeqList palist,DataType x)
    {
        int q;
        for(q = 0; q<palist->n; q++)
            if(palist->element[q] == x) return q;
        return -1;
    
    }
    
    //在下标为p的元素之前插入x;
    int insertPreSeq(PSeqList palist, int p,DataType x)
    {
        int q;
        if(palist->n >= palist->MAXNUM)
        {
            cout<<"Over flow"<<endl;
            return 0;
        }
        if(p<0 || p>palist->n)
            cout<<"Not exist"<<endl;
        //元素后移
        for(q = palist->n-1; q>=p; q--)
            palist->element[q+1] = palist->element[q];
        palist->element[p] = x;
        palist->n = palist->n + 1;
        return 1;
    }
    
    int insertAftSeq(PSeqList palist, int p,DataType x)
    {
        int q;
        if(palist->n >= palist->MAXNUM)
        {
            cout<<"Over flow"<<endl;
            return 0;
        }
        if(p<0 || p>palist->n)
            cout<<"Not exist"<<endl;
        //直接插入
        palist->element[p] = x;
        palist->n = palist->n + 1;
        return 1;
    }
    
    void showSeq(PSeqList palist)
    {
        for(int i=0;i<palist->n;i++)
            cout<<palist->element[i]<<" ";
        cout<<endl;
    }
    
    //删除下标为p的元素
    int deleteSeq(PSeqList palist,int p)
    {
        int q;
        if(p<0 || p>palist->n-1)
        {
            cout<<"Not exist"<<endl;
            return 0;
        }
        for(q=p; q<palist->n-1;q++)
            palist->element[q] = palist->element[q+1];
        palist->n = palist->n-1;
        return 1;
    }
    
    //删除所有值为x的元素
    //*********** 注意一下这种处理方法 *************
    void delect_x(PSeqList palist,DataType x)
    {
        int i,k =0;
        for(i=0; i<palist->n; i++)
        {
            if(palist->element[i]!=x)
            {
                palist->element[k] = palist->element[i];
                k++;
            }
        }
        palist->n = k;
    }
    
    
    int main()
    {
        cout<<"创建队列"<<endl;
        int m;
        cin>>m;
        PSeqList palist = createEmptySeq(m);
    
        cout<<"输入元素"<<endl;
    
        int count=0;
        DataType data;
        //为什么用了while来输入元素后,后面的cin都跳过
        while(cin>>data)
        {
            insertAftSeq(palist,count,data);
            count++;
        }
    
        cout<<"创建的顺序表为:"<<endl;
        showSeq(palist);
        //我也按照输入来更改顺序表,可是程序直接跳过了cin
        //如果是int data,insertAftSeq(palist,0,data)这样
        //一个个写插入的元素的话就没问题。。。。。
        cout<<"在下标为2的位置插入100"<<endl;
        insertPreSeq(palist,2,100);
        showSeq(palist);
    
        cout<<"删除第三个元素"<<endl;
        deleteSeq(palist,3);
    
        cout<<"删除元素:3"<<endl;
        delect_x(palist,3);
        showSeq(palist);
        return 0;
    }
  • 相关阅读:
    Dual Boot WINDOWS 10 and KALI LINUX Easily STEP BY STEP GUIDE截图
    【Head First Servlets and JSP】笔记8:监听者
    【网络】TCP的流量控制
    【Nginx】I/O多路转接之select、poll、epoll
    【Nginx】ngx_event_core_module事件模块
    【网络】TCP协议
    【网络】运输层
    【APUE】进程间通信之FIFO
    【APUE】文件I/O
    【c++】c++一些基础面试题
  • 原文地址:https://www.cnblogs.com/tianjintou/p/4521076.html
Copyright © 2011-2022 走看看