关于C语言顺序表模板的问题——求解答

再写C语言模板的时候,前几个模板都是正常的输出的,但是到后面几个(如:删除顺序表中的重复数据,将顺序表逆置)的模板是,顺序表长度输出的了一串负数,而且printf不出来顺序表

看代码才知道啊

应该是你的逻辑出错了。写了一个代码,供参考:
示例代码运行结果:

img

代码:

#include <stdio.h>
#define MAXNMB 100
template <typename T>
struct StNode
{
    T data[MAXNMB];
    int last;
};

//删除重复数据
template <typename T>
void deleRepeat(StNode<T>* L)
{
    int i, j;
    int k = 1;
    for(i=1;i<L->last;i++) //第一个数直接放入链表,所以从第L->data[1]开始判断
    {
        for(j=0;j<k;j++)
        {
            //判断是否重复
            if (L->data[i] == L->data[j])
                break;
        }
        if (j == i)//说明不重复,放入链表
        {
            L->data[k++] = L->data[i];
        }
    }
    L->last = k; //更新最后的元素数量
}

//逆序
template <typename T>
void reverse(StNode<T>* L)
{
    int i;
    T tmp;
    for (i = 0; i < L->last / 2; i++)
    {
        tmp = L->data[i];
        L->data[i] = L->data[L->last - i - 1];
        L->data[L->last - i - 1] = tmp;
    }
}

int main()
{
    struct StNode<int> List;
    int i;
    List.data[0] = 1;
    List.data[1] = 2;
    List.data[2] = 3;
    List.data[3] = 2;
    List.data[4] = 2;
    List.data[5] = 3;

    List.last = 6; 

    deleRepeat(&List);
    //显示结果
    printf("删除重复数据后:\n");
    for (i = 0; i < List.last; i++)
        printf("%d ", List.data[i]);
    printf("\n");

    printf("逆序后:\n");
    reverse(&List);
    for (i = 0; i < List.last; i++)
        printf("%d ", List.data[i]);
    printf("\n");

    return 0;
}