c语言数据结构创建链表问题
#include<stdio.h>#include<math.h>#include<malloc.h>typedef struct node{ char data; struct node *next; }LinkList;LinkList *create(){ LinkList *h,*p,*q; h=(LinkList *)malloc(sizeof(LinkList)); p=h; char ch; ch=getchar(); while(ch != '#'){ q=(LinkList *)malloc(sizeof(LinkList)); q->data=ch; p->next=q; p=q;//这句什么意思,最好整段全部解释下,数据结构一直不怎么懂 //p的下一个节点已经指向q,为什么要把q赋给p ch=getchar(); } p->next=NULL; return h; }
if(p->next->date==number){
q=p->next;
p->next=q->next;
break;
}
}
printf("删除该节点后:");
for(p=ls->next;p->next!=0;p=p->next)
printf("%d ",p->date);
printf("%d ",p->date);
}
//查找
int SearchNode(Plist &ls,int number)
{
int e=0;
Plist p=ls;
for(;p->next!=0;p=p->next,e++){
if(number==p->date)
return e;
}
if(p->next==0)
return 0;
}
int main(int argc, char* argv[])
{
Plist ls;
InitNode(ls);
printf("date=%d\n",ls->date);
printf("next=%d\n",ls->next);
//创建函数
printf("请输入一串数字(以-1作为结束条件):");
CreateNode(ls);
PrintfNode(ls);
//插入函数
int number ,i;
printf("请输入你要插入的数:");
scanf("%d",&number);
printf("请输入你要插入的位置:");
scanf("%d",&i);
InsertNode(ls,i,number);
printf("\n");
//删除函数
int e;
printf("请输入你要删除的数:");
scanf("%d",&e);
DeleteNode(ls,e);
printf("\n");
//查找
int m,n;
printf("请输入你要查找的数:");
scanf("%d",&m);
n=SearchNode(ls,m);
if(n==0)
printf("该单链表中没有该数!");
else
printf("%d在该链表中的位置是:第%d元素",m,n);
printf("\n");
return 0;
}
[解决办法]
h是头结点指针,是不变的。q是新创建的节点的指针,q=(LinkList *)malloc(sizeof(LinkList));q->data=ch;则新节点创建完毕。p是指向当前链表最后一个的节点的指针。 p->next=q; 这句使q节点插入到链表中。p=q;使p指向当前链表最后一个节点即p喽。
明白了吗?
[解决办法]
//L是头结点,p是尾结点
while(ch != '#'){
q=(LinkList *)malloc(sizeof(LinkList)); //要新加一个节点,先申请一个节点空间
q->data=ch; //给新节点赋值
p->next=q; //然后把q链接到链表尾部
p=q; //这句的意思是把q作为新的尾节点
ch=getchar();
}
p->next=NULL; //全部加完以后把尾节点的next指针置空
return h; //返回头节点
}
很基础,lz再看看书吧
[解决办法]