c语言数据结构创建链表有关问题
c语言数据结构创建链表问题
------解决方案--------------------
[color=#008000][/color]p=q;//这句什么意思,最好整段全部解释下,数据结构一直不怎么懂
//p的下一个节点已经指向q,为什么要把q赋给p
[color=#008000][/color];//保存临时创建的结点,以便下下一次的指针链接:p->next=q;否则,下次在链接节点时,上一次的节点就找不到了,因为你又重新申请了一个节点,q=(LinkList *)malloc(sizeof(LinkList));所以需要这次创建的节点保存起来,以便下次再用。
------解决方案--------------------
q=(LinkList *)malloc(sizeof(LinkList)); //申请节点
q->data=ch; //数据域赋值
p->next=q; //将q这个结构连接到链表中去。
p=q; // 将p移到p这个结构体的位置。此
p指向q这个位置。
ch=getchar();
}
p->next=NULL;
return h;
我也才刚学数据结构。下面是我编的单链表:
// SqTest0316.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
#include <stdlib.h>
//定义节点数据结构
typedef struct Node{
int date; //数据域
Node * next; //指针域
}*Plist;
//初始化链表
void InitNode(Plist &ls)
{
ls = (Node*)malloc(sizeof(Node)); //申请节点
ls->next = 0;
ls->date = 0;
return;
}
//创建链表
void CreateNode(Plist &ls)
{
int number ;
Plist p;
scanf("%d",&number);
do{
//采用前插方法 //后插法是?
p=(Plist)malloc(sizeof(Node)); //申请节点部分
p->date=number;
p->next = 0;
//插入部分
p->next = ls->next;
ls->next = p;
scanf("%d",&number);
}while(number!=-1);
}
/*// 遍历链表
void printfNode(Plist &ls)
{
Plist p=ls->next;
while(p->next!=0){
printf("%d ",p->date);
p=p->next;
}
}*/
//遍历链表
void PrintfNode(Plist &ls)
{
Plist p=ls->next;
int i=1;
while(1)
{
printf("第%d个元素为:%d\n",i,p->date);
if(p->next==0)
break;
p = p->next;
i++;
}
return;
}
//插入
void InsertNode(Plist &ls,int i,int e)
{
Plist p=ls,q;
int j=0; //计时器
//寻找i的位置
while(j<i-1){
p=p->next;
j++;
}
q=(Plist)malloc(sizeof(Node));
q->date=e;
q->next=p->next;
p->next=q;
printf("插入一个数字后:");
p=ls->next;
while(1)
{
printf("%d ",p->date);
if(p->next==0)
break;
p = p->next;
}
}
//删除
void DeleteNode(Plist &ls,int number)
{
Plist p=ls,q;
for(;p->next!=0;p=p->next){
- C/C++ code
#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;
}
------解决方案--------------------
[color=#008000][/color]p=q;//这句什么意思,最好整段全部解释下,数据结构一直不怎么懂
//p的下一个节点已经指向q,为什么要把q赋给p
[color=#008000][/color];//保存临时创建的结点,以便下下一次的指针链接:p->next=q;否则,下次在链接节点时,上一次的节点就找不到了,因为你又重新申请了一个节点,q=(LinkList *)malloc(sizeof(LinkList));所以需要这次创建的节点保存起来,以便下次再用。
------解决方案--------------------
q=(LinkList *)malloc(sizeof(LinkList)); //申请节点
q->data=ch; //数据域赋值
p->next=q; //将q这个结构连接到链表中去。
p=q; // 将p移到p这个结构体的位置。此
p指向q这个位置。
ch=getchar();
}
p->next=NULL;
return h;
我也才刚学数据结构。下面是我编的单链表:
// SqTest0316.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
#include <stdlib.h>
//定义节点数据结构
typedef struct Node{
int date; //数据域
Node * next; //指针域
}*Plist;
//初始化链表
void InitNode(Plist &ls)
{
ls = (Node*)malloc(sizeof(Node)); //申请节点
ls->next = 0;
ls->date = 0;
return;
}
//创建链表
void CreateNode(Plist &ls)
{
int number ;
Plist p;
scanf("%d",&number);
do{
//采用前插方法 //后插法是?
p=(Plist)malloc(sizeof(Node)); //申请节点部分
p->date=number;
p->next = 0;
//插入部分
p->next = ls->next;
ls->next = p;
scanf("%d",&number);
}while(number!=-1);
}
/*// 遍历链表
void printfNode(Plist &ls)
{
Plist p=ls->next;
while(p->next!=0){
printf("%d ",p->date);
p=p->next;
}
}*/
//遍历链表
void PrintfNode(Plist &ls)
{
Plist p=ls->next;
int i=1;
while(1)
{
printf("第%d个元素为:%d\n",i,p->date);
if(p->next==0)
break;
p = p->next;
i++;
}
return;
}
//插入
void InsertNode(Plist &ls,int i,int e)
{
Plist p=ls,q;
int j=0; //计时器
//寻找i的位置
while(j<i-1){
p=p->next;
j++;
}
q=(Plist)malloc(sizeof(Node));
q->date=e;
q->next=p->next;
p->next=q;
printf("插入一个数字后:");
p=ls->next;
while(1)
{
printf("%d ",p->date);
if(p->next==0)
break;
p = p->next;
}
}
//删除
void DeleteNode(Plist &ls,int number)
{
Plist p=ls,q;
for(;p->next!=0;p=p->next){