队列堆栈和数组-三角矩阵

#include<iostream>
#include <iomanip>
using namespace std;
enum TriangleTye{leftBottom,leftUp,rightBottom,rightUp};
struct TriangleMatrix
{
    int* nums;
    int scale;
    TriangleTye triangleTye;
    int size;
};

TriangleMatrix* createTriangleMatrix(int scale,TriangleTye triangleTye)
{
    int size = scale*(scale+1)/2;
    TriangleMatrix* p = (TriangleMatrix*)malloc(sizeof(TriangleMatrix));
    p->nums = new int[size+1];
    p->scale=scale;
    p->triangleTye=triangleTye;
    p->size=size;
    return p;
}

int getElement(TriangleMatrix* matrix,int i,int j)
{
    switch ((matrix->triangleTye))
    {
    case leftBottom:
        if(i<j)
            return 0;
        else return matrix->nums[i*(i-1)/2+j-1];
        break;

    case leftUp:
        if(matrix->scale-i+1<j)
            return 0;
        else return matrix->nums[matrix->size - ((matrix->scale-i)*(matrix->scale-i+1)/2+(matrix->scale-i+1-j))-1];
        break;

    case rightBottom:
        if(matrix->scale-i+1>j)
            return 0;
        else return matrix->nums[i*(i-1)/2+j-(matrix->scale-i)-1];
        break;

    case rightUp:
        if(i>j)
            return 0;
        else  return matrix->nums[matrix->size - (matrix->scale-i+1)*(matrix->scale-i+2)/2+j-i];
        break;

    default:
        return -1;
        break;
    }
}

void OuptPut(TriangleMatrix* p)
{
    
    for(int i=1;i<=p->scale;i++)
    {
        for(int j=1;j<=p->scale;j++)
        {
            printf("%d ",getElement(p,i,j)); 
        }
        printf("\n"); 
    }
}

void main()
{
    printf("\n"); 
    printf("%s","four kinds of triangle matrix, and the elements is:"); 
    printf("\n"); 
    int x=9;
    TriangleMatrix* p= createTriangleMatrix(x,leftBottom);
    for(int i=0;i<x*(x+1)/2;i++)
    {
        p->nums[i]=rand()%10;
        printf("%d ",p->nums[i]); 
    }
     printf("\n"); 
     printf("vertical corner at leftBottom:\n"); 
     OuptPut(p);

     printf("vertical corner at rightBottom:\n"); 
     p->triangleTye = rightBottom;
     OuptPut(p);

     printf("vertical corner at leftUp:\n"); 
     p->triangleTye = leftUp;
     OuptPut(p);

    printf("vertical corner at rightUp:\n"); 
     p->triangleTye = rightUp;
     OuptPut(p);

    printf("Done\n"); 
    scanf("%d",&x);
}

 

posted @ 2014-09-26 19:16  kbyd  阅读(204)  评论(0编辑  收藏  举报