我想用c实现广义表的创建和遍历,但再最开始的定义广义表就出现一堆错误。
以下是伪码算法
typedef enum { ATOM, LIST } ElemTag;
typedef struct GLNode {
ElemTag tag;
union {
AtomType atom; //元素有2个域
struct { struct GLNode *hp,*tp;
}ptr; //表有3个域
}
} *GList;
我编写的
#include<stdio.h>
#define ATOM 0
#define LIST 1
typedef enum { ATOM, LIST}ElemTag ;
typedef struct GLNode {
ElemTag tag;
union {
int atom;
struct { struct GLNode *hp,*tp; }ptr;
}
}*GList;
GList L;
main(){}
这个我用wintc运行总是提示出现错误。没学过enum 和union的用法所以我觉得是不是这两个函数用错了。请大家帮我改下程序顺便告诉我那两个函数该怎么用,谢谢。
ããä¸ãèå
ããèå(Union) 使å¾åä¸æ®µå åå¯ä»¥è¢«æç §ä¸åçæ°æ®ç±»åæ¥è®¿é®ï¼æ°æ®å®é æ¯åå¨å¨åä¸ä¸ªä½ç½®çãå®ç声æå使ç¨çèµ·æ¥ä¸ç»æ(structure)ååç¸ä¼¼ï¼ä½å®é åè½æ¯å®å ¨ä¸åçï¼
union model_name {ããunion ä¸çææ被声æçå ç´ å æ®åä¸æ®µå å空é´ï¼å ¶å¤§å°å声æä¸æé¿çå ç´ ç大å°ãä¾å¦ï¼
union mytypes_t {ããå®ä¹äº3个å ç´ ï¼
mytypes.c;ããæ¯ä¸ä¸ªæ¯ä¸ç§ä¸åçæ°æ®ç±»åãæ¢ç¶å®ä»¬é½æååä¸æ®µå å空é´ï¼æ¹åå ¶ä¸ä¸ä¸ªå ç´ çå¼ï¼å°ä¼å½±åææå ¶ä»å ç´ çå¼ã
ããunion çç¨éä¹ä¸æ¯å°ä¸ç§è¾é¿çåºæ¬ç±»åä¸ç±å ¶å®æ¯è¾å°çæ°æ®ç±»åç»æçç»æ(structure)ææ°ç»(array)èå使ç¨ï¼ä¾å¦ï¼
union mix_t{ãã以ä¸ä¾åä¸å®ä¹äº3个å称ï¼mix.l, mix.s å mix.cï¼å¯ä»¥éè¿è¿3个ååæ¥è®¿é®åä¸æ®µ4 bytesé¿çå å空é´ãè³äºä½¿ç¨åªä¸ä¸ªååæ¥è®¿é®ï¼åå³äºæ³ä½¿ç¨ä»ä¹æ°æ®ç±»åï¼æ¯long, short è¿æ¯ char ãä¸å¾æ¾ç¤ºäºå¨è¿ä¸ªèå(union)ä¸å个å ç´ å¨å åä¸ççå¯è½ç»æï¼ä»¥åå¦ä½éè¿ä¸åçæ°æ®ç±»åè¿è¡è®¿é®ï¼
ããäºãenumæ举
ãã1. æ举çå®ä¹
ããæ举类åå®ä¹çä¸è¬å½¢å¼ä¸ºï¼
enum æ举å{ æ举å¼è¡¨ };ããå¨æ举å¼è¡¨ä¸åºç½ååºææå¯ç¨å¼ãè¿äºå¼ä¹ç§°ä¸ºæ举å ç´ ã
ããä¾å¦ï¼
ãã该æ举å为weekdayï¼æ举å¼å ±æ7个ï¼å³ä¸å¨ä¸çä¸å¤©ãå¡è¢«è¯´æ为weekdayç±»ååéçåå¼åªè½æ¯ä¸å¤©ä¸çæä¸å¤©ã
ãã2. æ举åéç说æ
ããå¦åç»æåèåä¸æ ·ï¼æ举åéä¹å¯ç¨ä¸åçæ¹å¼è¯´æï¼å³å å®ä¹å说æï¼åæ¶å®ä¹è¯´ææç´æ¥è¯´æã
ãã设æåéa,b,c被说æ为ä¸è¿°çweekdayï¼å¯éç¨ä¸è¿°ä»»ä¸ç§æ¹å¼ï¼
enum weekday{ sun,mou,tue,wed,thu,fri,sat };ããæè 为ï¼
enum weekday{ sun,mou,tue,wed,thu,fri,sat }a,b,c;ããæè 为ï¼
enum { sun,mou,tue,wed,thu,fri,sat }a,b,c;ãã3ãæ举类ååéçèµå¼å使ç¨
ããæ举类åå¨ä½¿ç¨ä¸æ以ä¸è§å®ï¼
ããa. æ举å¼æ¯å¸¸éï¼ä¸æ¯åéãä¸è½å¨ç¨åºä¸ç¨èµå¼è¯å¥å对å®èµå¼ã
ããä¾å¦å¯¹æ举weekdayçå ç´ åä½ä»¥ä¸èµå¼ï¼
ã sun=5;ããé½æ¯é误çã
ããb. æ举å ç´ æ¬èº«ç±ç³»ç»å®ä¹äºä¸ä¸ªè¡¨ç¤ºåºå·çæ°å¼ï¼ä»0å¼å§é¡ºåºå®ä¹ä¸º0ï¼1ï¼2â¦ãå¦å¨weekdayä¸ï¼sunå¼ä¸º0ï¼monå¼ä¸º1ï¼â¦,satå¼ä¸º6ã
ãã说æï¼
ããåªè½ææ举å¼èµäºæ举åéï¼ä¸è½æå ç´ çæ°å¼ç´æ¥èµäºæ举åéãå¦ï¼
ããa=sum;ããæ¯æ£ç¡®çãèï¼
ããa=0;ããæ¯é误çãå¦ä¸å®è¦ææ°å¼èµäºæ举åéï¼åå¿ é¡»ç¨å¼ºå¶ç±»å转æ¢ã
ããå¦ï¼
a=(enum weekday)2;ããå ¶æä¹æ¯å°é¡ºåºå·ä¸º2çæ举å ç´ èµäºæ举åéaï¼ç¸å½äºï¼
ãã
a=tue;