链表c语言next date(C语言 创建带头结点的链表)
本文目录
- C语言 创建带头结点的链表
- C语言,编写程序已知head指向一个带头结点的单向链表,链表中每个结点包含数据域(date)和指
- C语言,我想要录入10本图书信息,应该怎么建链表谢谢啦
- 数据结构题目,建立一个10个节点的链表,然后删除第5个节点,查找第7个节点并打印,c语言啊!!求解
- c语言链表插入问题,pta提交有个段错误,请各位大佬帮忙找找茬,感激!
- C语言链表插入
- 数据结构c语言版链表问题
- c语言数据结构链表问题!肯求大神解答!
- c语言中s->data=e是什么意思啊,有谁能形象说明,还有next
- C语言如何用动态链表储存数据
C语言 创建带头结点的链表
单链表的生成有2种方式:头插法和尾插法。
1、头插法
/*********************************************************************
* 函数名称:linklist *CreateLinklistHead()
* 函数功能:利用头插法创建链表
* 参 数:无
* 返 回 值:创建完链表后的链表头结点
* 说 明:无
*********************************************************************/
extern linklist *CreateLinklistHead()
{
int x, i, nodeNum;
linklist *head, *temp; // 头结点与临时结点
head = (linklist *)malloc(sizeof(linklist)); // 生成表头结点
head-》next = NULL; // 给表头结点的指针域赋值
printf("请输入链表中结点的个数:");
scanf("%d", &nodeNum);
for(i=1; i《=nodeNum; i++)
{
printf("请输入第 %d 个结点的数据:", i);
scanf("%d", &x);
temp = (linklist *)malloc(sizeof(linklist)); // 生成新的结点
temp-》data = x; // 对新结点的数据域赋值
// 将新结点插到头结点之后
temp-》next = head-》next;
head-》next = temp;
}
return head; // 返回新建链表的头结点
}2、尾插法
/*********************************************************************
* 函数名称:linklist *CreateLinklistRear()
* 函数功能:利用尾插法创建链表
* 参 数:无
* 返 回 值:创建完链表后的链表头结点
* 说 明:无
*********************************************************************/
extern linklist *CreateLinklistRear()
{
int x, i, nodeNum;
linklist *head, *rear, *temp; // 定义头结点、尾结点和临时结点
head = (linklist *)malloc(sizeof(linklist)); // 生成表头结点,表头结点不存放数据
head-》next = NULL; // 将表头结点的指针域赋值为NULL
rear = head; // 将表头结点赋值给表尾结点
printf("请输入链表中结点的个数:");
scanf("%d", &nodeNum);
for(i=1; i《=nodeNum; i++)
{
printf("请输入第 %d 个结点的数据:", i);
scanf("%d", &x);
temp = (linklist *)malloc(sizeof(linklist)); // 生成新的结点
temp-》data = x; // 新增结点的数据域
temp-》next = NULL; // 新增结点的指针域(由于是尾插法,所以插入的结点都在尾部,即指针域为NULL)
rear-》next = temp; // 使前一个结点指向新增结点(head-》next=temp)
rear = temp; // 将新增结点赋值给尾结点(尾插法,插入的结点在尾部)(rear=head-》next)
}
//rear-》next = NULL; // 将尾结点的指针域赋值为空(为了方便检验链表是否为空链表)
return head; // 返回头结点
}
C语言,编写程序已知head指向一个带头结点的单向链表,链表中每个结点包含数据域(date)和指
#include《stdio.h》
#include《stdlib.h》
typedef struct _Node
{
int data;
_Node *next;
}Node,*List;
int getMax_Value(List head)
{
if (head-》next == NULL)
{
printf("链表中没有节点.\n");
exit(-1);
}
Node *ptr = head-》next;
int max = ptr-》data;
while (ptr-》next != NULL)
{
ptr = ptr-》next;
if (ptr-》data 》 max)
{
max = ptr-》data;
}
}
return max;
}
Node* getMax_Address(List head)
{
if (head-》next == NULL)
{
printf("链表中没有节点.\n");
exit(-1);
}
Node *ptr = head-》next;
Node *max_address = ptr;
while (ptr-》next != NULL)
{
ptr = ptr-》next;
if (ptr-》data 》 max_address-》data)
{
max_address = ptr;
}
}
return max_address;
}
List creatList(int num)//num为创建节点个数
{
List head = (Node*)malloc(sizeof(Node));
head-》data = 0;
head-》next = NULL;
Node *ptr = head;
Node *node = NULL;
int data;
while (num)
{
printf("请输入节点则值:");
scanf("%d", &data);
node = (Node*)malloc(sizeof(Node));
node-》data = data;
node-》next = NULL;
ptr-》next = node;
ptr = node;
head-》data++;
num--;
}
return head;
}
void ****List(List head)
{
Node* ptr = head;
while (head)
{
head = ptr-》next;
****(ptr);
ptr = head;
}
}
int main()
{
List head=creatList(5);
printf("链表的最大值为:%d\n", getMax_Value(head));
printf("链表最大值的地址为:0x%x,%d\n", getMax_Address(head), (getMax_Address(head))-》data);
****List(head);
return 0;
}
C语言,我想要录入10本图书信息,应该怎么建链表谢谢啦
录入我写了函数直接赋值的,没写键盘输入,你想写自己加吧
下面是代码,我详细注释了。
#include《stdio.h》
#include《malloc.h》
#include《string.h》
typedef struct book//图书结构我随便设了几个成员,你自己改
{
char name;
char type;
int date;
struct book *next;
}bk;
int main ()
{
bk *addBook(bk *bkTail,char *vName,char *vType,int vDate);
bk *bk0=(bk *)malloc(sizeof(bk));//申请一个首节点指针内存空间
bk *bkTail=bk0;//定义一个末尾节点指针
bk *bkHead=(bk *)malloc(sizeof(bk));
bkHead-》next=bk0;//定义一个用于遍历的头节点不放数据 单纯其成员链表指针指向首节点
bk0-》name=0;
//------------录入我就不写了,就试放4个图书测试,你要自己加吧
bkTail=addBook(bkTail,"C语言从入门到入土","IT/科学",20171220);
bkTail=addBook(bkTail,"jave从入门到入土","IT/科学",20171225);
bkTail=addBook(bkTail,"数据库从入门到入土","IT/科学",20171226);
bkTail=addBook(bkTail,"学会自己长大","教育",20171230);
printf("图书信息已录入\n");
//--------------------打印
printf("开始打印图书库存信息\n");
while(bkHead-》next!=NULL)
{
printf("图书名:%s、图书类别:%s、入库日期:%d\n",bkHead-》next-》name,bkHead-》next-》type,bkHead-》next-》date);
bkHead=bkHead-》next;
}
return 0;
}
bk *addBook(bk *bkTail,char *vName,char *vType,int vDate)//创建1个新的图书链表节点 连接在链表最后 并返回当前录入节点
//参数1 尾节点地址; 其他参数为录入的成员数据
{
if(bkTail-》name==0)//首次录入
{
strcpy(bkTail-》name,vName);
strcpy(bkTail-》type,vType);
bkTail-》date=vDate;
bkTail-》next=NULL;
return bkTail;
}
else
{
bk *newBk=(bk *)malloc(sizeof(bk));
strcpy(newBk-》name,vName);
strcpy(newBk-》type,vType);
newBk-》date=vDate;
newBk-》next=NULL;
bkTail-》next=newBk;
return newBk;
}
}
数据结构题目,建立一个10个节点的链表,然后删除第5个节点,查找第7个节点并打印,c语言啊!!求解
#include 《stdio.h》
#include 《stdlib.h》
#include 《time.h》
typedef struct date{
int date;
struct date *next;
}Date;
void main()
{
Date *head=NULL,*p1,*p2,*p;
int i;
srand(time(NULL));//使用随机数为每个节点赋值
p2=p1=(Date *)malloc(sizeof(Date));
p1-》date=rand()%20+1;
for(i=0;i《9;i++)//建立链表
{
if(head==NULL)head=p1;
else
{
p2=p1;
}
p1=(Date *)malloc(sizeof(Date));
p1-》date=rand()%20+1;
p2-》next=p1;
}
p1-》next=NULL;//链表建立完成
printf("下面是刚才建立的链表:\n");
p=head;
while(p!=NULL) //打印链表
{
printf("%d ",p-》date);
p=p-》next;
} //打印链表完成
printf("\n下面是删除第5个节点的链表:\n");
p1=p2=head;
for(i=0;i《4;i++)//找到第五个节点p1,p2自相第四个节点,也就是p2-》next=p1
{
p2=p1;
p1=p1-》next;
}
p2-》next=p1-》next;//删除第五个节点,即让第四个节点指向第六个节点
p=head;
while(p!=NULL) //打印删除第五个节点后的链表
{
printf("%d ",p-》date);
p=p-》next;
} //打印链表完成
p=head;
for(i=0;i《6;i++)//找到第七个节点p
{
p=p-》next;
}
printf("\n第七个节点的内容是:");
printf("%d\n",p-》date);
}
c语言链表插入问题,pta提交有个段错误,请各位大佬帮忙找找茬,感激!
看到你这问题,你时间快到了吧。
你变量命名很随意,没有备注,逻辑读起来很费时间,另外i变量没使用,所有指针变量都没有初值,建议都给初值NULL否则会有野指针。
直接模仿你的结构写一个吧。
#include 《stdio.h》
#include 《stdlib.h》
struct date{
int num;
struct date *next;
};
int main()
{
int n,m,num;
struct date *head=NULL,*hSave=NULL,*tail=NULL,*newDate=NULL;
scanf("%d",&n);//第一行有序输入
while(n--)//根据第二行输入生成链表
{
scanf("%d",&m);
newDate=(struct date *)malloc(sizeof(struct date));
newDate-》num=m;
newDate-》next=NULL;
if(!newDate)
return 1;
if(head==NULL)
{
head=(struct date *)malloc(sizeof(struct date));
if(!head)
return 1;
head-》next=newDate;
}
else
tail-》next=newDate;
tail=newDate;
}
scanf("%d",&num);//第三行输入 插入
newDate=(struct date *)malloc(sizeof(struct date));
newDate-》num=num;
newDate-》next=NULL;
hSave=head;
while(hSave-》next)//遍历链表
{
if(hSave-》next-》num《=num && (hSave-》next-》next==NULL || hSave-》next-》next-》num》=num))//当前节点数值小于等于输入并且(下一节点为空或下一个节点数值大于等于输入)
{
newDate-》next=hSave-》next-》next;
hSave-》next-》next=newDate;
break;
}
hSave=hSave-》next;
}
while(head-》next)//最终输出打印
{
printf("%d ",head-》next-》num);
head=head-》next;
}
return 0;
}
C语言链表插入
char data?
结点data是字符串?
抽时间帮你写了一个
有什么不合要求的地方你自己改改吧
#include 《stdio.h》
#include 《string.h》
#include 《malloc.h》
typedef struct Lnode{
char *data;
struct Lnode *next;
}Lnode, *LinkList;
void CreateList(LinkList &L, char *buff)
{
int flag=0, j=0;
int len=strlen(buff);
L=(Lnode *)malloc(sizeof(Lnode));
L-》next=NULL;
LinkList q=L;
for(int i=0;i《len;i+=4)
{
j=0;
LinkList p=(Lnode *)malloc(sizeof(Lnode));
q-》next=p;
p-》next=NULL;
p-》data=(char *)malloc(sizeof(char)*5);
while(j《4)
{
p-》data;
}
p-》data=’\0’;
q=q-》next;
}
}//初始化链表L
void TraverseList(LinkList L)
{
LinkList p;
p=L-》next;
while(p)
{
printf("%s",p-》data);
p=p-》next;
}
printf("\n");
}//遍历链表L
void InsertList(LinkList &L,int i,char *ins)
{
LinkList p=L;
int temp=0;
i/=4;
while(temp《i)
{
p=p-》next;
temp++;
}
if(!p) printf("Insert Failed");
LinkList s=(Lnode *)malloc(sizeof(Lnode));
s-》data=(char *)malloc(sizeof(char)*5);
strcpy(s-》data, ins);
s-》next=p-》next;
p-》next=s;
}//在单链表L的第i个元素继续插于入ins
void main()
{
fflush(stdin);
char buff;
int m;
printf("Plz type in the string:");
gets(buff);
LinkList L;
CreateList(L, buff);
printf("The linklist L is : ");
TraverseList(L);
//printf("%d", flag);
printf("where to insert (m):");
scanf("%d", &m);
printf("what to insert:");
fflush(stdin);
scanf("%s", &ins);
//gets(ins);
InsertList(L, m, ins);
TraverseList(L);
}
数据结构c语言版链表问题
#include 《stdio.h》
#include 《stdlib.h》
#include 《malloc.h》
struct data {
char num; //停不下来有可能是串定义的小了,输入的数据大了,导致内存混乱!8个数据的串要定义9个空间,给’\0’留个位置
char name;
char gender;
int score ;
} ;
typedef struct aa
{
struct data date;
struct aa *next ;
} sequenlist ;
void createList(sequenlist *L)// 优化了一下这个函数
{
int n,i;
sequenlist *p1;
sequenlist *p2;
p1=L; //p1指向表头,所以的数据均在此表头后插入
printf("有几位学生?请输入:\n");
scanf("%d",&n);
printf("以下请输入这%d位学生的信息:\n",n);
for(i=1;i《=n;++i)
{
printf("第%d位学生:",i);
printf("\n学号(8) 姓名(8) 性别 成绩\n");
fflush(stdin);
p2=(sequenlist *)malloc(sizeof(sequenlist));//p2是新结点,直接将数据读入
scanf("%s%s%s%d",p2-》date.num,p2-》date.name,p2-》date.gender,&p2-》date.score);
p1-》next=p2; //将新结点加到表尾
p1=p2;//新结点成为新的表尾
}
p1-》next=NULL; //置表结束
}
void printList(sequenlist *L)
{
int i;
i=0;
printf("\n学号(8) 姓名(8) 性别 成绩\n");
printf("-------------------------------------------\n");
L=L-》next;
while(L!=NULL)
{
i++;
printf("第%d位学生:",i);
printf("%s,%s,%s,%d\n",L-》date.num,L-》date.name,L-》date.gender,L-》date.score);
printf("------------------------------------------------------------------\n");
L=L-》next;
}
}
int main()
{
sequenlist *head=(sequenlist *)malloc(sizeof(sequenlist) ); //这个很重要,建立一个非数据的头结点
createList(head);
printList(head);
return 0;
}
有几位学生?请输入:
2
以下请输入这2位学生的信息:
第1位学生:
学号(8) 姓名(8) 性别 成绩
1 hello male 100
第2位学生:
学号(8) 姓名(8) 性别 成绩
2 world female 95
学号(8) 姓名(8) 性别 成绩
-------------------------------------------
第1位学生:1,hello,male,100
------------------------------------------------------------------
第2位学生:2,world,female,95
------------------------------------------------------------------
c语言数据结构链表问题!肯求大神解答!
链表有种:带头结点的和不带头结点的。
带头结点的写程序比较简单、明了,它用一个结点作为头结点,不算链表数据,主要用来指出第一个数据结点的位置,建立、遍历和删除链表时,主函数操作比较方便,不用考虑头结点的变化(在子函数中完成第一个数据结点的位置变化,而主函数不用考虑)。而在不带头结点的链表中,主函数总要考虑第一个数据结点的变化,必须通过参数或返回值带回这个值的变化,初学者总会在这上面犯错。
以上你的程序大体正确,有一个错误,就是p的变量类型不对,应该是struct node *p;p应该是个结点指针。可见你的程序是不带头结点的链表,因为你将第一个结点的数据所算作链表数据了。对于带头结点的链表的遍历,第一个数据结点是p=head-》next ;
c语言中s->data=e是什么意思啊,有谁能形象说明,还有next
s-》data
说明 s 是一个结构体 ,data 是结构体的一个元素
s-》data = e 将 e 赋值给 结构体s下的data
next ? 你这里应该是学链表吧 ,next 一般指向链表下一个结构体的地址
C语言如何用动态链表储存数据
单链表,双链表,堆 都可以,不过看您要存储什么数据 以单链表为例: 定义一个节点结构 typedef struct LNode{ ElementType date; struct Lnode *next; }Lnode; 然后用malloc开辟需要的节点空间,把数据存进去就可以了 p = (Lnode) malloc (sizeof(Lnode)); //开辟一个节点,p为所开辟空间的指针 至于查找,从头节点开始q = p-》next ;一个个查就行了。
更多文章:
twitter怎么读(微博的英文是micro blog还是直接weibo这个拼音呢)
2026年4月6日 12:40
python代码库 云代码(求云模型评价云图的python代码,做出的图就像下面图一样的)
2026年4月6日 11:20
一级excel函数公式大全(计算机等级考试一级用到的excel公式有哪些)
2026年4月6日 10:20







