|
|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
本帖最后由 /鸡蛋饼. 于 2012-3-24 23:43 编辑
麻烦大家帮我运行下 这个程序 !在我机器上运行的时候 红色字体循环部分 在第一次循环的时候,调用函数自动赋值为空
这里我用printf输出了 I的值的变化 请大家帮帮忙! 各种循环我都用过 结果还是一样 !
/*File :List--datastruct
*--------------------
* 熟练掌握定义新的类型以及使用
*/
/*Data Struct*/
typedef char* string;
typedef struct
{
string name;
struct node *next;
}node,*pNode;
typedef struct
{
int nodenum;
struct node *base;
}list,*pList;
#include <stdio.h>
#include <malloc.h>
#include <string.h>
/*Function Declaration*/
static void traversal(pList list);
static pList CreatList(void);
static char *Gmalloc (void);
static pList ListInsert(pList list);
/*Main program*/
int main (void)
{
int i=0;
int n;
pList list;
list = CreatList();
printf("请输入您要增加的节点各数\n");
scanf("%d",&n);
printf("---------\n");
printf("开始读入新的节点数据\n");
do
{
printf("i = %d\n",i);
ListInsert(list);
i++;
}while(i<n);
printf("链表有效节点数为:%d\n",list->nodenum);
traversal(list);
return 0;
}
/*Function*/
static pList CreatList(void)
{
pList list;
pNode node;
list = (pList)malloc(sizeof *list);
node = (pNode)malloc(sizeof *node);
if(!list)
{
printf("分配内存失败");
}
if(!node)
{
printf("分配内存失败");
}
list->nodenum = 0;
while(node)
{
printf("下面对第一个节点进行输入:\n");
node->name = Gmalloc();
node->next = NULL;
list->base = node;
list->nodenum++;
if(list->base)
break;
}
return (list);
}
static pList ListInsert(pList list)
{
pNode phead;
pNode temp;
temp = list->base;//引用直接的物理内存?
phead = (pNode)malloc(sizeof *phead);
if(!phead)
{
printf("节点分配内存失败");
}
phead->name = Gmalloc();
phead->next = temp;
temp = phead;
list->base = temp;
list->nodenum++;
}
static char *Gmalloc (void)
{
char* pTemp;
char Temp[88];
gets(Temp);
pTemp = (char *)malloc(strlen(Temp));
strcpy(pTemp,Temp);
return pTemp;
}
static void traversal(pList list)
{
pNode temp;
temp = list->base;
while(temp!=NULL)
{
printf("遍历第%d个节点",list->nodenum-1);
printf("%s\n",temp->name);
temp = temp->next;
list->nodenum--;
}
}
|
|