注册 登录
编程论坛 数据结构与算法

栈怎么删除元素

wbajieng 发布于 2010-05-10 21:42, 1897 次点击
Status Pop(SqStack &S,SElemType &e){
       //若栈不空则删除S的栈顶元素,用e返回其值
       if(S.top==s.base)  return ERROR;
       e=*--S.top;
       return OK;
}//Pop
这是书上的删除栈顶元素的方法,不过我觉得这样做只把栈顶指针向下移了一位,原来那个地址上的元素应该还存在吧。
请高手帮忙讲一下!谢谢了哈!
6 回复
#2
2010-05-10 21:47
没有必要删除那个元素,栈只处理栈顶元素,懂?
#3
hzh5122010-05-10 21:59
数据结构中分存储结构和逻辑结构。
栈是一种逻辑结构,这你应该知道。
在实现上,即栈对应的存储结构为 顺序结构 和 链式结构两种。
如果你用数组,此时删除只是下标后移,通过数组你仍能访问。
如果你用链栈,那么可能要释放掉的,此时是真删除了,你找不会地址了。
遇到问题要仔细想想!
#4
aitajiujiage2010-05-10 23:07
下面是我的栈删除的做法,你可以参考一下:
顺序栈的删除:
typedef struct
{int stack[100];
int top;
}seqstack;
int stackposh()
{seqstack *s;
if(s->top==-1)
{printf("此栈为空!");
return NULL;
}
else
return s->stack[s->top+1];
}
链式栈的删除:
typedef struct node
{int data;
struct node *next;
}NODE;
typedef struct
{NODE *top;
}linkstack;
linkstack *stackpop(linkstack *s)
{linkstack *p;
if(s->top==NULL)
{printf("此战为空!");
return NULL;
}
else
{
p=top;
top=top->next;
free(p);
return(top);
}
}                                                                                          
#5
wbajieng2010-05-12 14:20
高手如云啊
在下懂了。
谢了哈!!
#6
tfxanxing2010-05-12 20:21
顺序存储结构pop ,就行了,
链式存储结构最多再 delete 对应单元就行
#7
鸣行天下2010-05-23 11:44
如果你使用了单链表形式建立那就要FREE(q)把它给删了
1