电脑软硬件应用网
当前位置: 电脑软硬件应用网 > 设计学院 > 网络编程 > C语言 > 正文
c语言的一结构数据的堆栈实现问题
c语言的一结构数据的堆栈实现问题
2007-7-3 9:37:47  文/marcel   出处:学海无涯   
已经有编好的通用类型的类似堆栈程序,分别是Piles.h和Piles.c,这里列出头文件,主要是了解调用方法:
#ifndef PILE_H
#define PILE_H
#include <stdbool.h>
typedef struct _pile *Pile;
typedef enum {
  PILE_PAS_D_EXCEPTION,
  PILE_VIDE,
  PILE_IMPOSSIBLE_D_ALLOUER_MEMOIRE
} ExceptionPile;
// --------------------------------------
// constructeur :
// retourne une pile vide.
// exception :
//   PILE_IMPOSSIBLE_D_ALLOUER_MEMOIRE, l'allocation n'a pas fonctionner.
Pile creerPile( ExceptionPile * );
// --------------
// manipulateur :
// ajouter un element sur le sommet de la pile.
// exception :
//   PILE_IMPOSSIBLE_D_ALLOUER_MEMOIRE, l'allocation n'a pas fonctionner.
void empiler( Pile, void *element, ExceptionPile * );
// enleve le sommet de la pile.
// exception :
//   PILE_VIDE, depiler a ete appele sur une pile vide.
void  depiler( Pile, ExceptionPile * );
// -------------
// observateur :
// lire le sommet de la pile.
// exception :
//   PILE_VIDE, sommet a ete appeler sur une pile vide.
void *sommet( Pile, ExceptionPile * );
// retourne true si la pile est vide.
bool estVide( Pile );
#ifdef TESTS_UNITAIRES
// routine effectuant les tests unitaires.
// cette routine terminre normalement si les tests
// unitaires detectent une erreurs.
// sinon cette routine termine anormalement affichant
// l'erreur trouvee (assert).
void testerPiles();
#endif
#endif

 
另外我建立了一结构数据Point,表示一座标轴上的点。
结构数据定义如下:
/*point.h*/
#ifndef _POINT_H
#define _POINT_H
//structure point pour presenter un point
typedef struct point{
  float x;
  float y;
} Point;
#endif
 
另外一主程序main.c用来测试堆栈程序:
#include <stdio.h>
#include <stdlib.h>
#include "point.h"
#include "Piles.h"
int main(int argc, char * argv[])
{
 
  Pile p_nouveau;
  ExceptionPile exp = 0;
  int i,j;
  int *element;
  Point *p1 = malloc(sizeof *p1);
 
  if (argc == 1)
  {
   
   
    for(i = 0; i < 4; i++){
     
      element = (int*)i;
      printf("Empiler l'element : %d\n", element);
      empiler(p_nouveau, element, &exp);
     
     }
    
    for(i = 0; i < 4; i++ )
    {
      element = sommet(p_nouveau, &exp);
      printf("Depiler l'element est : %d\n", element);
      depiler(p_nouveau, &exp);    }
    
    for(i = 0; i < 4; i++){
     
      p1->x = (float)i;
      p1->y = (float)i;
      printf("Empiler le point (%f, %f)\n", p1->x, p1->y);
      empiler(p_nouveau, p1, &exp);
     
     }
    
      for(i = 0; i < 4; i++ )
    {
      p1 = sommet(p_nouveau, &exp);
      printf("Depiler le point (%f, %f)\n", p1->x, p1->y);
      depiler(p_nouveau, &exp);
     
    }
    
    
   }
 
  return 0;
}
 
在linux下gcc编译通过,执行结果如下:
Empiler l'element : 0
Empiler l'element : 1
Empiler l'element : 2
Empiler l'element : 3
Depiler l'element est : 3
Depiler l'element est : 2
Depiler l'element est : 1
Depiler l'element est : 0
Empiler le point (0.000000, 0.000000)
Empiler le point (1.000000, 1.000000)
Empiler le point (2.000000, 2.000000)
Empiler le point (3.000000, 3.000000)
Depiler le point (3.000000, 3.000000)
Depiler le point (3.000000, 3.000000)
Depiler le point (3.000000, 3.000000)
Depiler le point (3.000000, 3.000000)
 
问题:
在对整数进行堆栈运行时,测试正确,但对结构数据point进行出栈执行时,总是显示最后进栈的数据,不知道问题出在什么地方,希望大家能帮忙解决一下,不甚感激!
另外很多名词是法语的,希望大家不要介意:
pile:也就是stack的意思
empiler:相当于push的意思
depiler:相当于pop的意思
element:相当于dada的意思
sommet: 相当于堆栈顶点的意思
  • 上一篇文章:

  • 下一篇文章:
  • 最新热点 最新推荐 相关文章
    用C语言实现的闹钟程序
    C#实现Windows关机的代码
    用动态规划法求组和数的算法
    循环结构程序具有哪3个组成部分?
    const成员函数有什么特点?
    c语言求平均分程序
    一道关于指针的C语言题
    C语言求3个整数的最大公约数
    BM模式匹配算法C语言实现
    从键盘输入任意5个4位整数存入数组a…
    关于45IT | About 45IT | 联系方式 | 版权声明 | 网站导航 |

    Copyright © 2003-2011 45IT. All Rights Reserved 浙ICP备09049068号