NTT笔试编程题

laoaren 2008-10-17 04:48:57
用链表实现堆栈的Push,Pop和Delate操作函数,其中Delete函数功能是删除堆栈中所有元素,请不要使用全局变量,链表节点定义如下:
typedef struct tagLISTNODE
{
void *data;
struct tagLISTNODE *pNext;
}LISTNODE, *PLISTNODE;

题都没看明白,typedef { } 后怎么还有个指针变量?
数据是void * ?

帮忙写个程序把。
...全文
749 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
yueyinggufan 2009-02-09
  • 打赏
  • 举报
回复
刚写的,你看看吧 delete就是把pop循环个N次 倒数第二次刚好把last=first,使得最后一次detele last就等于detele first 完美删除

void main()
{
//算是初始化吧
PLISTNODE first=new LISTNODE; //首结点
first->data=new data_type; //data_type为随便的数据类型
*((data_type*)first->data)=...; //赋值
PLISTNODE last=first; //末结点
size_t num=1;//结点数
.
.
.
}
//push函数
void push(PLISTNODE last,size_t& num)
{
num++;
last->next=new LISTNODE;
last->next->data=new data_type;
*((data_type*)last->next->data)=...;
last=last->next;
}
//pop函数
void pop(PLISTNODE frist,PLISTNODE last,size_t& num)
{
num--; //节点数减一
delete (data_type*)last->data; //删结点中的data
delete last; //删节点
last=first;
for(int i=num;i-1>0;i--) //last指向最后结点
{
last=last->next;
}

}
//delete函数
void delete (PLISTNODE frist,PLISTNODE last,size_t& num)
{
for(int i=num;i>0;i--)
pop(first,last,num);
}
yueyinggufan 2009-02-09
  • 打赏
  • 举报
回复
刚写的,你看看吧 delete就是把pop循环个N次 倒数第二次刚好把last=first,使得最后一次detele last就等于detele first 完美删除

void main()
{
//算是初始化吧
PLISTNODE first=new LISTNODE; //首结点
first->data=new data_type; //data_type为随便的数据类型
*((data_type*)first->data)=...; //赋值
PLISTNODE last=first; //末结点
size_t num=1;//结点数
.
.
.
}
//push函数
void push(PLISTNODE last,size_t& num)
{
num++;
last->next=new LISTNODE;
last->next->data=new data_type;
*((data_type*)last->next->data)=...;
last=last->next;
}
//pop函数
void pop(PLISTNODE frist,PLISTNODE last,size_t& num)
{
num--; //节点数减一
delete (data_type*)last->data; //删结点中的data
delete last; //删节点
last=first;
for(int i=num;i-1>0;i--) //last指向最后结点
{
last=last->next;
}

}
//delete函数
void delete (PLISTNODE frist,PLISTNODE last,size_t& num)
{
for(int i=num;i>0;i--)
pop(first,last,num);
}
lfoqyng 2009-02-09
  • 打赏
  • 举报
回复
排……
lfoqyng 2009-02-09
  • 打赏
  • 举报
回复
排!
lfoqyng 2009-02-09
  • 打赏
  • 举报
回复
排!
Pajack 2009-02-09
  • 打赏
  • 举报
回复
路过。。
dannyboy1024 2009-02-09
  • 打赏
  • 举报
回复
LISTNODE, *PLISTNODE分别是struct tagLISTNODE 的别名,和指针类型的别名。目的是方便定义struct.
例如:LISTNODE A; 等价于:struct tagLISTNODE A;
PLISTNODE B 等价于: struct tagLISTONDE *B;
写个pop的函数吧
int pop(PLISTNODE root){
if (root==null){
cout<<"list is empty!";
return 0;
}
LISTNOTDE temp1,temp2=root;
while(tmep2!=null){
temp1=temp2;
temp2=temp2->pNext;
}
temp1->=null;
return 1;
}
bitxinhai 2008-10-17
  • 打赏
  • 举报
回复
void *data;
空指针可以指向任意变量,当然可以写了!!!
laoaren 2008-10-17
  • 打赏
  • 举报
回复
这是准确的考题。
如果不对,就是出错题了。那就考虑修改下再编程序把。
kiffa 2008-10-17
  • 打赏
  • 举报
回复
typedef int i, *p
i a; //int a
p a; // int *a;

至于data是什么类型,无所谓,反正把它当初堆栈里的东西就行了。
boys2002 2008-10-17
  • 打赏
  • 举报
回复
写不了啊



void *data;

怎么能行啊 没见到你这样子的a A?



我是不敢写!!!!!!!!!!!!!!

64,649

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧