再写C语言模板的时候,前几个模板都是正常的输出的,但是到后面几个(如:删除顺序表中的重复数据,将顺序表逆置)的模板是,顺序表长度输出的了一串负数,而且printf不出来顺序表
看代码才知道啊
应该是你的逻辑出错了。写了一个代码,供参考:
示例代码运行结果:
代码:
#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;
}