| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 875 人关注过本帖
标题:请教数据结构问题
只看楼主 加入收藏
bcomer
Rank: 1
等 级:新手上路
帖 子:113
专家分:0
注 册:2004-9-13
收藏
 问题点数:0 回复次数:4 
请教数据结构问题

结果是NO EXIST!

???

#include<stdio.h> #include<stdlib.h> #define MAXNUM 100 #define FALSE 0 #define TRUE 1 #define SPECIAL 2147483647 typedef int DataType; struct SeqList { DataType element[MAXNUM]; int n; }; typedef struct SeqList *PSeqList; PSeqList creatNullList_seq(void); PSeqList insert_seq(PSeqList palist,DataType x,int p); DataType retrieve_seq(PSeqList palist,int p); int isNullList_seq(PSeqList palist); main() { int w; PSeqList palist ; palist=(PSeqList)malloc(sizeof(struct SeqList)); palist=insert_seq(palist,1,1); w=retrieve_seq(palist,1); printf("%d ",w); getch(); } PSeqList creatNullList_seq(void) { PSeqList palist; palist=(PSeqList)malloc(sizeof(struct SeqList)); if(palist!=NULL) { palist->n=0; return palist; } else { printf("Out of space"); return (NULL); } } PSeqList insert_seq(PSeqList palist,DataType x,int p) { int q; if(palist->n==MAXNUM) { printf("Overflow!\n"); return (FALSE); } if(p<0||p>(palist->n)) { printf("No exist!\n"); return (FALSE); } else { for (q=(palist->n);q>p;q--) { palist->element[q+1]=palist->element[q]; } palist->element[p]=x; palist->n=palist->n+1; } return(palist); } int retrieve_seq(PSeqList palist,int p) { if(p<0||p>palist->n) { printf("No exist!\n"); return (SPECIAL); } else return (palist->element[p-1]); }

搜索更多相关主题的帖子: 数据结构 
2004-09-21 12:56
young
Rank: 3Rank: 3
等 级:论坛游侠
威 望:2
帖 子:223
专家分:160
注 册:2004-9-5
收藏
得分:0 

我看你写了creatNullList_seq这个函数却没有使用, 试着把这句话 palist=(PSeqList)malloc(sizeof(struct SeqList)); 改成这样:palist = creatNullList_seq(); 结构中的n是否指数组中已存元素的个数? insert_seq函数中的第三个参数是否指插入的位置?(我看你的程序位置是0到(MAXNUM -1 )吧 ) 看程序应该没有问题。我看不出来 如果你用VC++的话,可以使用设置断点的方式,在你认为可能出错的地方设置(按 F9) 然后按F5, 开始运行,然后按F10单步执行,执行到相关的语句,选种要看的变量(反黑显示)单击右键,选择quick watch(中文版为“快速检视”),看其中的值是否正确,也可直接在quick watch中输入变量名,然后按回车,检查其中的值,这是一种高效的发现错误的方式。请自己试试,当然VC还有很多有用的功能,我就不再说了。

还想说说你定义的结构,其实定义一个结构体并没有什么意思,你无非是在一个数组的指定位置插入一个值,而数组的大小是可以通过计算得到的 (sizeof(element)/sizeof(DataType)) 在数组中插入一个数平均需要移动数组元素个数为:n/2;(n为数组元素个数) 所以我们通常采用链表来代替数组,链表无需移动元素。 我重新定义了一下数据结构: typedef struct _Node { DataType element; _Node * next; } Node_t;

typedef struct SeqList { Node_t sqList; int n; } ; // 也许只要第一个就行了,定义第二个是为了存一个节点总数 // 初步这样吧,请各位发表看法,如有不妥或错误,敬请指出。


如果你爱C语言,请你爱指针; 如果你爱指针,请你爱指针的指针;
2004-09-21 22:30
bcomer
Rank: 1
等 级:新手上路
帖 子:113
专家分:0
注 册:2004-9-13
收藏
得分:0 
以下是引用young在2004-09-21 22:30:50的发言:

我看你写了creatNullList_seq这个函数却没有使用, 试着把这句话 palist=(PSeqList)malloc(sizeof(struct SeqList)); 改成这样:palist = creatNullList_seq(); 结构中的n是否指数组中已存元素的个数? insert_seq函数中的第三个参数是否指插入的位置?(我看你的程序位置是0到(MAXNUM -1 )吧 ) 看程序应该没有问题。我看不出来 如果你用VC++的话,可以使用设置断点的方式,在你认为可能出错的地方设置(按 F9) 然后按F5, 开始运行,然后按F10单步执行,执行到相关的语句,选种要看的变量(反黑显示)单击右键,选择quick watch(中文版为“快速检视”),看其中的值是否正确,也可直接在quick watch中输入变量名,然后按回车,检查其中的值,这是一种高效的发现错误的方式。请自己试试,当然VC还有很多有用的功能,我就不再说了。

还想说说你定义的结构,其实定义一个结构体并没有什么意思,你无非是在一个数组的指定位置插入一个值,而数组的大小是可以通过计算得到的 (sizeof(element)/sizeof(DataType)) 在数组中插入一个数平均需要移动数组元素个数为:n/2;(n为数组元素个数) 所以我们通常采用链表来代替数组,链表无需移动元素。 我重新定义了一下数据结构: typedef struct _Node { DataType element; _Node * next; } Node_t;

typedef struct SeqList { Node_t sqList; int n; } ; // 也许只要第一个就行了,定义第二个是为了存一个节点总数 // 初步这样吧,请各位发表看法,如有不妥或错误,敬请指出。

谢谢
2004-09-22 10:10
逍遥自我
Rank: 1
等 级:新手上路
帖 子:47
专家分:0
注 册:2004-9-30
收藏
得分:0 

你好,好象你对VC 的用法很熟,可以给我说说吗,我的邮箱是zhp11@126.com

QQ:191071963

注名你加我的原因

2004-10-02 14:46
逍遥自我
Rank: 1
等 级:新手上路
帖 子:47
专家分:0
注 册:2004-9-30
收藏
得分:0 
我也遇到一样的问题,我也不知道为什么,但是你把变量定义为全局变量就可以
2004-10-02 14:47
快速回复:请教数据结构问题
数据加载中...
 
   



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

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