C语言删除栈中重复元素,用数组实现,不用指针
发布网友
发布时间:2022-04-26 10:13
我来回答
共2个回答
热心网友
时间:2022-06-27 05:48
思路是可行的。试着实现一下吧。应该有不了太多代码。基本上就是两层循环就行了。
此外,C语言中数组和指针的关系非常密切,用数组实现,和不用指针没有直接关系。只是语法的不同和编程习惯的不同而已。
编程序多了就能体会。
===================================================
怎么会不对呢?最简单的调试方法:你把每一步的内容都用printf打印出来,看看是哪一步错了。
===================================================
有重复的跳过,换句话说,就是发现当前元素是重复的就不入栈。所以你不用删除或者替换重复的元素。
在碰到一个元素的时候,检查是否它是否已经在栈上了,如果在,就不入栈。不需要替换为空格,或者是入栈之后再删除。那样很麻烦,而且浪费时间。
热心网友
时间:2022-06-27 05:49
//可以采纳如下代码;
#include<stdio.h>
#include<malloc.h>
#define N 10
typedef struct
{
int *base;
int *top;
int stacksize;
}SqStack;
void InitStack(SqStack *S)
{
S->base=(int *)malloc(N*sizeof(int));
if(!S->base)exit(1);
S->top=S->base;
S->stacksize=N;
}
void Push(SqStack *S,int e)
{
if(S->top-S->base>=S->stacksize)
{
S->base=(int *)realloc(S->base,(S->stacksize+N)*sizeof(int));
if(!S->base)exit(1);
S->top=S->base+S->stacksize;
S->stacksize+=N;
}
*S->top++=e;
}
int Pop(SqStack *S)
{
int e;
if(S->top==S->base)return 0;
e=*--S->top;
return e;
}
int main()
{
int a[N],i,j,e=0;
SqStack b;
InitStack(&b);
printf("Please input numbers :\n");
for(i=0;i<N;i++)
scanf("%d",&a[i]);
i=0;
while(i<N)
{
j=i+1;
while(j<N&&a[i]!=a[j++]);
if(j==N)Push(&b,a[i]);
i++;
}
printf("New :\n");
while(b.base!=b.top)
{
e=Pop(&b);
printf("%3d",e);
}
getch();
return 1;
}