欢迎来到Doc100.Net免费学习资源知识分享平台!
您的位置:首页 > 程序异常 >

c语言中一个很奇怪的有关问题

更新时间: 2014-05-16 15:08:38 责任编辑: Author_N6

 

C语言中一个很奇怪的问题
typedef struct LNode
{
ElemType data;
int count;
struct LNode *next;
}LNode,*LinkList;


LinkList InsertLnode(LinkList &L,int loc,ElemType m)
{

LinkList p3,p2,p1;
p1=L;
p3=L;
}
这是我程序的一部分,其中的p1,p3 位置完全一样,但是p3得到分配地址,但是p1却没得到地址。是我调试的时候发现的。

为了让大家看的清楚我把代码简化了
完整如下
#include<stdio.h>
#include<malloc.h>
#define ElemType int
#define NULL 0
int n=0;
typedef struct LNode
{
ElemType data;
int count;
struct LNode *next;
}LNode,*LinkList;


//初始化单链表
LinkList InnitLinkList(LinkList &L)
{
char *str;
L=(LinkList)malloc(sizeof(LNode));
L->next=NULL;
L->count=0;
str="初始化成功";
printf("%s",str);
return L;
}

//项链表中插入新元素的函数
LinkList InsertLnode(LinkList &L,int loc,ElemType m)
{
char*str;
LinkList p3,p2,p1;
p1=L;
p3=L;

if(loc<1||loc>n+1)
{
str="插入位置不合法\n";
printf("%s",str);return L;
}
else
{
p2=(LinkList)malloc(sizeof(LNode));
//scanf("%d",&p2->data );
p2->data =m;
p2->count=loc;

while((p1->count)!=loc)
{
p3=p1;
p1=p1->next;
}
p2->next =p3->next;
p3->next =p2;
while(p2->next!=NULL)
{
p2->count=p2->count+1;
p2=p2->next;
}
str="插入数据成功\n";
printf("%s",str);
n=n+1;
return L;

}
}


//在单链表中删除元素
LinkList DeleteLinkList(LinkList &L,int loc)
{
char*str;
LinkList p1,p2;
p1=p2=L;
if(loc<1||loc>n)
{
str="删除位置非法\n";
printf("%s",str);
return L;
}
else
{
/* if(loc==n)
{
while(p1->count!=loc)
{
p2=p1;
  p1=p1->next;
}
p2->next =NULL;
}
else
{*/
  while(p1->count!=loc)
{
p2=p1;
  p1=p1->next;
}
p2->next=p1->next;
/*}*/
while(p2->next!=NULL)
{
p2=p2->next;
p2->count=p2->count+1;
}
n=n-1;
str="删除成功\n";
printf("%s",str);
return L;
}
}


//输出单链表函数
void ShowList(LinkList &L)
{
LinkList p1;
p1=L;
while(p1->next!=NULL)
{
p1=p1->next ;
printf("%d",p1->data);
}
}


void main()
{
  char *str;
LinkList linklist;
InnitLinkList(linklist);
str="如果您想向单链表中插入元素请按1\n\n";
printf("%s",str);
str="如果您想从链表中删除某元素请按2\n\n";
printf("%s",str);
str="如果您想输出链表中全部元素请按3\n\n";
printf("%s",str);
str="如果您想现在退出该程序请按0命令\n\n";
printf("%s",str);
for(int i=1;i!=0;)
{
int comm;
str="请输入要执行的命令\n";
printf("%s",str);
scanf("%d",&comm);
switch(comm)
{
case 1:{
int loc,val;
str="请输入插入的元素的位置loc\n";
printf("%s",str);
scanf("%d",&loc);
if(loc<1||loc>n+1)
{
str="插入位置不合法\n";
printf("%s",str);
}
else
{
str="请输入插入的元素值val\n";
printf("%s",str);
scanf("%d",&val);
InsertLnode(linklist,loc,val);
}
}
break;
case 2:{
int loc;
str="请输入删除的元素的位置loc\n";
上一篇:上一篇
下一篇:下一篇

 

随机推荐程序问答结果

 

 

如对文章有任何疑问请提交到问题反馈,或者您对内容不满意,请您反馈给我们DOC100.NET论坛发贴求解。
DOC100.NET资源网,机器学习分类整理更新日期::2014-05-16 15:08:38
如需转载,请注明文章出处和来源网址:http://www.doc100.net/bugs/t/644233/
本文WWW.DOC100.NET DOC100.NET版权所有。