我们专注攀枝花网站设计 攀枝花网站制作 攀枝花网站建设
成都网站建设公司服务热线:400-028-6601

网站建设知识

十年网站开发经验 + 多家企业客户 + 靠谱的建站团队

量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决

c语言函数输入链表 c++输入链表

C语言链表创建和输入

敢问楼主,为何要两个链表?你的需求一个链表完全搞定了啊,第二个链表是用来做什么的?

成都创新互联公司专注为客户提供全方位的互联网综合服务,包含不限于网站设计制作、做网站、韶山网络推广、小程序定制开发、韶山网络营销、韶山企业策划、韶山品牌公关、搜索引擎seo、人物专访、企业宣传片、企业代运营等,从售前售中售后,我们都将竭诚为您服务,您的肯定,是我们最大的嘉奖;成都创新互联公司为所有大学生创业者提供韶山建站搭建服务,24小时服务热线:18982081108,官方网址:www.cdcxhl.com

#includestdio.h                                                               

#includestdlib.h                                                              

struct student{                                                                 

char name[10];                                                                 

char id[10];                                                                   

struct student *next;                                                          

};                                                                              

int main(void)                                                                  

{                                                                               

int n;                                                                       

printf("请输入要学生个数,以回车结束!\n");                                  

scanf("%d",n);                                                              

struct student *head=(struct student *)malloc(sizeof(struct student));       

head-next=NULL;                                                             

struct student *end=head;                                                    

for(int i=0;i!=n;i++)                                                        

{                                                                            

struct student*p=(struct student *)malloc(sizeof(struct student));         

p-next=NULL;                                                              

printf("第%d个学生信息:\n",i+1);                                          

printf("  姓名:");                                                        

scanf("%s",p-name);                                                      

printf("  学号:");                                                        

scanf("%s",p-id);                                                        

end-next=p;                                                               

end=p;                                                                     

}                                                                            

for(struct student *p=head-next;p!=NULL;p=p-next)                          

{                                                                            

printf("姓名:%s  学号:%s \n",p-name,p-id);                               

}                                                                            

}

截图如下:

编写函数插入一个结点到链表之中 C语言

如果已知一个节点指针pre和一个节点指针cur,要把cur插入到pre节点之后,很显然要保证链表不会断开而丢失后面的节点,要先把后面的节点指针(指向lat的指针)保存下来,即有cur-next

=

pre-next,然后把cur连接的一串链表连接到pre后面,即pre-next

=

cur;

上面介绍了,在一个节点之后插入节点的情况。这是通常的情况。如果要向一个链表的头部插入节点,就只需要将新节点的下一个指针指向链表的头指针即可。

在这种情况下,有两点要注意:

1,链表是否为空链表

2,要插入的节点是不是空指针。

代码实现:

//向单链表中插入一个节点(插入在链开始处)

//输入参数:单链表的头指针和要插入的节点指针

//输出参数:无

//返回值:指向单链表的头指针

singlelist*

insert(singlelist

*head,singlelist

*node)

{

if(node

==

null)

{

return

head;

}

else

if(head

==

null)

{

return

node;

}

node-next

=

head;

head

=

node;

return

head;

}

C语言创建链表,函数调用部分

#includestdio.h

#includewindows.h

#include stdio.h

#include malloc.h

#include stdlib.h

//定义数据类型名称

typedef int DataType;

#define flag -1        //定义数据输入结束的标志数据

//单链表结点存储结构定义

typedef struct Node

{

DataType data;

struct Node *next;

}LNode ,*LinkList;

//建立单链表子函数

LNode *Create_LinkList()

{

LNode *s,*head,*L;int i=0,x;        //定义指向当前插入元素的指针

while(1)

{

scanf("%d",x);

if(-1==x)

{   return head;

break;}

s= (LNode *)malloc(sizeof(LNode));        //为当前插入元素的指针分配地址空间

s-data =x;

s-next =NULL;

i++;

if(i==1)

head=s;

else

L-next =s;

L=s;

}

}

//查找子函数(按序号查找)

LNode *Get_LinkList(LinkList L,int i)

{

LNode *p;

int j;        //j是计数器,用来判断当前的结点是否是第i个结点

p=L;

j=1;

while(p!=NULLji)

{

p=p-next ;        //当前结点p不是第i个且p非空,则p移向下一个结点

j++;

}

return p;

}

//插入运算子函数

void Insert_LinkList(LinkList L,int i,DataType x)        //在单链表L中第i个位置插入值为x的新结点

{

LNode *p,*s;

p =Get_LinkList(L,i);        //寻找链表的第i-1个位置结点

if(p==NULL)

{

printf("插入位置不合法!");

exit(-1);

}

else

{

s= (LinkList)malloc(sizeof(LNode));        //为当前插入元素的指针分配地址空间

s-data =x;

s-next =p-next ;

p-next =s;

}

}

//单链表的删除运算子函数

void Delete_LinkList(LinkList L,int i)        //删除单链表上的第i个结点

{

LNode *p,*q;

p=Get_LinkList(L,i-1);        //寻找链表的第i-1个位置结点

if(p==NULL)

{

printf("删除的位置不合法!");        //第i个结点的前驱结点不存在,不能执行删除操作

exit(-1);

}

else

{

if(p-next ==NULL)

{

 printf("删除的位置不合法!");        //第i个结点不存在,不能执行删除操作

 exit(-1);

}

else

{

 q=p-next ;

 p-next =p-next-next;

 free(q);

}

}

}

//求表长运算子函数

int Length_LinkList(LinkList L)

{

int l;        //l记录L的表长

LNode *p;

p=L;

l=1;

while(p-next)

{

p=p-next;

l++;

}

return l;

}

int main ()

{

LNode *head,*p;

head=(LinkList)malloc(sizeof(LNode));

int x,y;

a:

printf("*******menu*******\n");

printf("**创建**********1*\n");

printf("**插入**********2*\n");

printf("**删除**********3*\n");

printf("**表长**********4*\n");

printf("**清屏**********5*\n");

printf("**打印**********6*\n");

printf("**退出******other*\n");

printf("******************\n");

int i=1;

while(i)

{

printf("请输入选项:");

scanf("%d",i);

switch(i)

{

case 1:head=Create_LinkList(); getchar();break;

case 2:printf("请输入位置和数据;");

scanf("%d%d",x,y);

Insert_LinkList(head,x,y);break;

case 3:printf("请输入位置;");

scanf("%d",x);

Delete_LinkList(head,x);break;

case 4:printf("%d",Length_LinkList(head));break;

case 5:system("cls");goto a;

case 6:p=head;

while(p!=NULL)

{printf("%d\n",p-data);

p=p-next;}

break;

default :i=0;

}

}

}

我把创建给改了一下

C语言中将键盘输入的信息存入链表

#include stdio.h

#include stdlib.h

#define M 2

int n,i,j,x; //定义变量 ,M为行,n为列,i、j为循环变量,x为自变量

typedef struct Node //建立线性链表

{

int a[M][1];//定义一个列数组

struct Node*next;//指针成员

}LNode;

void create(LNode*head);//创建线性链表函数声明

void display(LNode*head);//显示线性链表函数声明

void Deleteline(LNode*head);//删除链表中的某几列函数声明

void Change(LNode*head);//改变链表中数据的函数的声明

int main(int argc, char *argv[])

{

printf("列表目前行数等于2\n");

printf("目前列数等于0\n");//表示 m行0列

LNode*head;//定义链表头指针

head=(LNode*)malloc(sizeof(LNode));//分配空间

head-next=NULL;//下一个为空

create(head);//建立线性链表

display(head);//显示线性链表

Deleteline(head);//删除某一列

display(head);//显示

Change(head);//改变元素

system("PAUSE");

return 0;

}

void create(LNode*head)

{

LNode*p,*rear=head;//空的线性链表头和尾

printf("输入 '0'或'1'\n如果您输入 '0',则结束输入:");

scanf("%d",x);

n=0;//表示有0列

while(x)//输入"0"则退出

{ if(!n)

printf("输入第一列:\n");

else printf("输入下一列:\n");

p=(LNode*)malloc(sizeof(LNode));//为指针分配空间

for(i=0;iM;i++)//循环输入该列的每一行每一个元素

{ scanf("%d",x);

p-a[i][0]=x;

}

p-next=NULL;//新追加的结点为尾结点,后继为空

rear-next=p;//新追加的结点在最后,也就是rear的后继

rear=p;//新追加的结点为新的表尾,rear指向新的表尾

printf("输入 '0'或'1'\n如果您输入 '0',则结束输入:");

scanf("%d",x);

n++;//列数自增一

}

}

void display(LNode*head)//列表显示函数

{

LNode*p=head-next;//定义指针成员指向表头

printf("列表\n");//显示列表名称并换行

for(j=0;jM;j++)

{

for(i=0;in;i++)//执行 “行循环 ”

{

printf("%d\t",p-a[j][0]); //

p=p-next;//p指向下一元素

}

p=head-next;//重新指到表头

printf("\n");//换行

}

printf("n=%d\n",n);

}

void Deleteline(LNode*head)

{

LNode*p=head-next;//定义成员指针

int k;//定义所删除的列序号

printf("输入您要删除的列序号:");//提示输入列序号

scanf("%d",k);//接收列序号

if(k==1)

{

head-next=p-next;//将头指针的后继变为第二列

free(p);//释放空间

n--;//n自减

printf("n=%d\n",n);

}

else if(kn)

{

for(i=2;ik;i++)//循环找到节点的前驱

{

p=p-next;

}

LNode*q=p-next;//定义指向所删除列的指针

p-next=q-next;//把所删除的列节点的后继赋给其前驱的后继

free(q);//释放空间

n--;

printf("n=%d\n",n);

}

else

{

for(i=1;ik;i++)//直接找到

{

p=p-next;

}

free(p);//释放

n--;

printf("n=%d\n",n);

}

}

void Change(LNode*head)

{

int k;//定义所要改变的元素的列数

LNode*p=head-next;//定义指向第一个元素的结构指针

printf("输入您要改变的元素的行坐标:");//提示输入要改变的元素的行坐标

scanf("%d",j);//接收

printf("输入您要改变的元素的列坐标:");//提示输入要改变的元素的列坐标

scanf("%d",k);//接收

for(i=1;ik;i++)//找到

{

p=p-next;

}

printf("请输入改变后的值:");//提示输入改变的值

scanf("%d",x);//接收

p-a[j-1][0]=x;//传值

display(head);//再现

}

我这是一个链表构造的列表,功能有:建立一个列表、删除一列,显示列表、改变具体位置的元素值四个大功能。不过行数初始化确定了的,是2,你也可以自己设计如何在dos窗口动态输入。注释都有,你自己还可以修改其中的函数和语句,使这个结构功能变得更强大。

希望对你有所帮助!!!

C语言链表的输入

struct

student

*creat(void)

{struct

student

*head;

struct

student

*p1,*p2;

n=0;

p1=p2=(struct

student*)malloc(len);

//这里格式化输入二个数0,0

scanf("%ld,%f",p1-num,p1-score);

//head赋值为null

head=null;

//刚才输入的是0因此不满足条件一次循环都不走

while(p1-num!=0)

{

n=n+1;

if(n==1)head=p1;

else

p2-next=p1;

p2=p1;

p1=(struct

student*)malloc(len);

scanf("%ld,%f",p1-num,p1-score);

}

p2-next=null;

//所以这时候head还是最初赋的值null自然打不出信息

return(head);

}


当前名称:c语言函数输入链表 c++输入链表
网站链接:http://mswzjz.cn/article/hpjdje.html

其他资讯