当前位置:编程学习 > C/C++ >>

数据结构试验 顺序表

编写一个完整的程序,实现顺序表的建立、插入、删除、输出等基本运算。
(1) 建立一个顺序表,含有n个数据元素。

(2) 输出顺序表及顺序表的长度。

(3) 在顺序表中删除值为x的结点或者删除给定位置i的结点。

(4) 将顺序表就地逆置,即利用原表的存储空间将线性表(a1,a2,...,an)逆置为(an,an-1,...,a1)。

(5) 将顺序表按升序排序。

(6) 设顺序表中的数据元素递增有序,将x插入到顺序表的适当位置上,以保持该表的有序性。

(7) 将两个顺序有序表A和B合并为一个有序表C。

在主函数中设计一个简单的菜单,分别测试上述算法


[cpp]  //因为之前没有写过这样的操作菜单,所以很多地方没做好。比如说输入输出的数据没有对齐,整个排版看起来有些拥挤,每一次操作都会输出一次菜单。  
//实验目的是测试各个函数的作用,写的时候除了创建顺序表的函数,其他函数后面我都加了一个输出函数,将按要求改变后的顺序表直接输出了。  
//我将a、b、c数组和n、m都设置成了全局变量,方便代码的操作。  
//因为创建函数没有设置形参,在合并数组的时候,我是先将a数组赋值给b数组,数组合并后将c数组再复制给a数组输出。这个是我事先没考虑到,下次改进。  
//输出菜单可以放在函数里面,主函数中的代码看起来会简洁很多,之前也没想到。  
//写完之后发现把删除数据的函数给漏掉了,后面又加上了。  
//测试数据:a数组:5   2 5 3 4 1   
//插入元素:第3位 7  
//b数组:7    8 9 10 11 12 13 14  
//删除数据: 第3位  
#include<stdio.h>  
#define N 105  
int a[N],b[N],c[N*2]; 
int n,m; 
void Creatlist()//创建函数  

    int i; 
    printf("输入数据数量:     "); 
    scanf("%d",&n); 
    printf("输入数据:         "); 
    for(i=0;i<n;i++) 
        scanf("%d",&a[i]); 
    return ; 

void Printlist()//打印函数  

    int i; 
    printf("顺序表长度n:   %d\n",n); 
    printf("顺序表:        "); 
    for(i=0;i<n;i++) 
        printf("%d ",a[i]); 
    printf("\n"); 
    return ; 

void Inverlist()//逆序函数,逆序后直接输出  

    int r,l; 
    int temp; 
    for(l=0,r=n-1;l<=r;l++,r--) 
    { 
        temp=a[r]; 
        a[r]=a[l]; 
        a[l]=temp; 
    } 
    Printlist(); 
    return ; 

void Sortlist()//排序函数,用的是冒泡排序,因为不是实验重点,也就没太注意效率的问题。  

    int i,j; 
    int temp; 
    for(i=n-1;i>=1;i--) 
    { 
        for(j=0;j<i;j++) 
            if(a[j]>a[j+1]) 
            { 
                temp=a[j]; 
                a[j]=a[j+1]; 
                a[j+1]=temp; 
            } 
    } 
    Printlist(); 
    return ; 

void Insertlist()//插入函数  

    int x,y; 
    int temp0,temp1; 
    int i; 
    printf("插入数据的位置:    "); 
    scanf("%d",&x); 
    printf("插入数据的数值:    "); 
    scanf("%d",&y); 
    temp0=a[x-1]; 
    a[x-1]=y; 
    for(i=x;i<n;i++) 
    { 
        temp1=a[i]; 
        a[i]=temp0; 
        temp0=temp1; 
    } 
    a[i]=temp0; 
    n++; 
    Printlist(); 
    return ; 

void Comlist()//合并函数,在这个函数中重新输入了一个数组  

    int i,j,k; 
    for(i=0;i<n;i++) 
        b[i]=a[i]; 
    m=n; 
    Creatlist(); 
    i=j=k=0; 
    while(i<n||j<m) 
    { 
        if(a[i]<b[j]&&i<n&&j<m) 
        { 
            c[k++]=a[i]; 
            i++; 
        } 
        else if(a[i]>=b[j]&&i<n&&j<m) 
        { 
            c[k++]=b[j]; 
            j++; 
        } 
        else if(i==n) 
        { 
            c[k++]=b[j]; 
            j++; 
        } 
        else  
        { 
            c[k++]=a[i]; 
            i++; 
        } 
    } 
    for(i=0;i<k;i++) 
        a[i]=c[i]; 
    n=k; 
    Printlist(); 
    return ; 

void Delelist() 

    int x; 
    int i; 
    printf("需要删除的数据的位置:  "); 
    scanf("%d",&x); 
    a[x-1]=a[x]; 补充:软件开发 , C++ ,

CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,