| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1218 人关注过本帖
标题:链栈的定义为什么要分两步,一次不可以吗
只看楼主 加入收藏
wshyj18
Rank: 1
等 级:新手上路
帖 子:124
专家分:0
注 册:2007-5-14
收藏
 问题点数:0 回复次数:2 
链栈的定义为什么要分两步,一次不可以吗
在看链栈的时候。定义时要这样
typedef struct stacknode{
datatype data
struct stacknode *next
}stacknode;

typedef struct {
stacknode *top;
}linkstack;
可是我直接这样不行吗
typedef struct stacknode{
datatype data
struct stacknode *next
}stacknode;
把它当作一个单链表,下面是我写的它的基本操作,有一个错误,大家帮忙改改
#include<stdio.h>
#include<stdlib.h>
#include<malloc.h>
typedef struct node/*建一个表的类型*/
{
    int date;
    struct node *next;
}lstuct;
void Init(lstuct *p)/*置空啊,没办法,我只能这样*/
{
 p=NULL;
}
void push(lstuct *p,int m)
{
 lstuct *s;
 s=(lstuct*)malloc(sizeof(lstuct));/*为入的这个数分配内存空间*/
 if(!s)
     printf("mei you fen pei hao a");
      s->next=NULL;
      s->date=m;
 else
     if(p==NULL)
     p=s;
     else
    {
         s->next=p;
         p=s;

    }   
}
void pop(lstuct *p)
{
 lstuct *s=p;
 if(p==NULL)
     printf("不行啊,没元素,怎么删啊");/*13.41*/
 else
    {
     p=p->next;
     free(s);
   }
}
void display(lstuct *p)
{
 if(p==NULL)
     printf("不行啊,你输不出来啊,一个数都没有,怎么输");
 else
     while(p!=NULL)
    {
     printf("%d",p->date);
     p=p->next;
    }
}
void main()
{
 lstuct *p;
 p=(lstuct*)malloc(sizeof(lstuct));
 Init(p);
 push(p,3);
 push(p,4);
 push(p,5);
 printf("你写入的数是:");
 display(p);
 pop(p);
 printf("\n你出来后的数为:");
 display(p);
}
搜索更多相关主题的帖子: 链栈 stacknode struct 定义 typedef 
2007-12-28 14:42
syuanq
Rank: 2
等 级:新手上路
威 望:3
帖 子:297
专家分:0
注 册:2006-12-11
收藏
得分:0 
主要if与else的配对,if后面如果有多个语句就要用括号括起来
改为下面就没错误了
#include<stdio.h>
#include<stdlib.h>
#include<malloc.h>
typedef struct node/*建一个表的类型*/
{
    int date;
    struct node *next;
}lstuct;
void Init(lstuct *p)/*置空啊,没办法,我只能这样*/
{
p=NULL;
}
void push(lstuct *p,int m)
{
lstuct *s;
s=(lstuct*)malloc(sizeof(lstuct));/*为入的这个数分配内存空间*/
if(!s)
{
    printf("mei you fen pei hao a");
      s->next=NULL;
      s->date=m;
}
else
     if(p==NULL)
     p=s;
     else
    {
         s->next=p;
         p=s;

    }   
}
void pop(lstuct *p)
{
lstuct *s=p;
if(p==NULL)
     printf("不行啊,没元素,怎么删啊");/*13.41*/
else
    {
     p=p->next;
     free(s);
   }
}
void display(lstuct *p)
{
if(p==NULL)
     printf("不行啊,你输不出来啊,一个数都没有,怎么输");
else
     while(p!=NULL)
    {
     printf("%d",p->date);
     p=p->next;
    }
}
void main()
{
lstuct *p;
p=(lstuct*)malloc(sizeof(lstuct));
Init(p);
push(p,3);
push(p,4);
push(p,5);
printf("你写入的数是:");
display(p);
pop(p);
printf("\n你出来后的数为:");
display(p);
}

[url]www.[/url]欢迎大家的光临,一起交流学习
2007-12-29 18:36
nuciewth
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:我爱龙龙
等 级:贵宾
威 望:104
帖 子:9786
专家分:208
注 册:2006-5-23
收藏
得分:0 
可以,上面linkstack ==struct node *

倚天照海花无数,流水高山心自知。
2007-12-31 11:21
快速回复:链栈的定义为什么要分两步,一次不可以吗
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.023628 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved