当前位置:首页 » 编程语言 » 链表c语言版本
扩展阅读
webinf下怎么引入js 2023-08-31 21:54:13
堡垒机怎么打开web 2023-08-31 21:54:11

链表c语言版本

发布时间: 2022-04-19 17:27:10

c语言链表

指针在x86系统里大小是32位4个字节,在64位系统是8字节大小。指针好比一个盒子,盒子里有个东西也就是它指向的内容,内容是一个实体对象的首地址。盒子本身不能存放实体对象,就好比盒子里有张名片,通过名片你可以找到这个人,总不能把人放盒子里吧。
得有这个人然后把找到这个人的名片放盒子里。

❷ C语言链表···

struct date{…}/链表结构体
p1/定义链表结构体的一个指针名插入点/
p1=(struct date *)malloc(sizeof(struct date))/分配链表内存
free(newnode)/释放节点内存
删除全部节点定义两个链表指针名p1,p2循环删除
while(p1->next!=NULL)
{p2=p1;
p1->…/p1指向下链表一节点
free(p2);
}

❸ c语言链表

#include<stdio.h>
#include<stdlib.h>

struct chain
{
int value;
struct chain *next;
};

struct chain *create()
{
struct chain *head,*tail,*p;
int x;
head = tail = NULL;
while(scanf("%d",&x)==1)
{
p=(struct chain*)malloc(sizeof(struct chain));
p->value=x;
p->next=NULL;
if(head==NULL)
head = tail = p;
else
tail=tail->next=p;
}
return head;
}

struct chain *inlink(struct chain *head,int a,int b) //int a代表要插入的节点,int b代表创建节点的数据域
{
struct chain *p,*q,*s;
s = (struct chain *)malloc(sizeof(struct chain));
s->value=b;
if(head==NULL)
{
head = s;
head->next = NULL;
}
if(head->value == a)
{
s->next=head;
head = s;
}
else
{
p=head;
while((p->value!=a)&&(p->next!=NULL))
{
q=p;
p=p->next;
}
if(p->value == a)
{
q->next = s;
s->next = p;
}
else
{
p->next=s;
s->next=NULL;
}
}
return (head);
}

struct chain *dellink(struct chain *head,int a) //int a代表要删除的节点
{
struct chain *q,*p;
if(head == NULL)
printf("找不到节点!\n");
else if(head->value == a)
{
p = head;
head = head->next;
}
else
{
p=head;
while((p->value!=a)&&(p->next!=NULL))
{
q=p;
p=p->next;
}
if(p->value != a)
printf("链表不存在此节点!\n");
else
{
q->next = p->next;
free(p);
}
}
return (head);
}

void main()
{
struct chain *p,*q;
q=create(); //链表的创建;
//q=inlink(create(),3,1); //链表的插入;
//q=dellink(create(),2); //链表的删除;
while(q){ //输出链表;
printf("%d\n",q->value);
p=q->next;
free(q);
q=p;
}
}
希望能解决您的问题。

❹ c语言 链表


#include <stdio.h>
#include <stdlib.h>
//这里创建一个结构体用来表示链表的结点类型
struct node
{
int data;
struct node *next;
};
int main()
{
struct node *head,*p,*q,*t;
int i,n,a,b;

printf("输入小朋友人数和待插入的小朋友身高:如6,97 ");
scanf("%d,%d",&n,&b);

printf("输入已经排好队的小朋友的身高序列: ");
head = NULL;// 头指针初始为空
for(i=1;i<=n;i++)// 循环读入n个数
{
scanf("%d",&a);
// 动态申请一个空间,用来存放一个结点,并用临时指针p指向这个结点
p=(struct node *)malloc(sizeof(struct node));
p->data=a;// 将数据存储到当前结点的data域中
p->next=NULL;// 设置当前结点的后继指针指向空,也就是当前结点的下一个结点为空
if(head==NULL)
head=p;// 如果这是第一个创建的结点,则将头指针指向这个结点
else
q->next=p;// 如果不是第一个创建的结点,则将上一个结点的后继指针指向当前结点
q=p;// 指针q也指向当前结点
}

t=head;// 从链表头部开始遍历
while(t!=NULL)// 当没有到达链表尾部的时候循环
{
if(t->next->data > b)// 如果当前结点下一个结点的值大于待插入数,将数插入到中间
{
p=(struct node *)malloc(sizeof(struct node));// 动态申请一个空间,用来存放新增结点
p->data=b;
p->next=t->next;//新增结点的后继指针指向当前结点的后继指针所指向的结点
t->next=p;// 当前结点的后继指针指向新增结点
break;// 插入完毕退出循环
}
t=t->next;// 继续下一个结点
}
// 输出链表中的所有数
t=head;
printf("插入后序列为: ");
while(t!=NULL)
{
printf("%d ",t->data);
t=t->next;// 继续下一个结点
}

system("pause");
return 0;
}

请采纳

❺ C语言 链表

#include<stdio.h>
#include<stdlib.h>

struct chain
{
int value;
struct chain *next;
};

struct chain *create()
{
struct chain *head,*tail,*p;
int x;
head = tail = NULL;
while(scanf("%d",&x)==1)
{
p=(struct chain*)malloc(sizeof(struct chain));
p->value=x;
p->next=NULL;
if(head==NULL)
head = tail = p;
else
tail=tail->next=p;
}
return head;
}

struct chain *inlink(struct chain *head,int a,int b) //int a代表要插入的节点,int b代表创建节点的数据域
{
struct chain *p,*q,*s;
s = (struct chain *)malloc(sizeof(struct chain));
s->value=b;
if(head==NULL)
{
head = s;
head->next = NULL;
}
if(head->value == a)
{
s->next=head;
head = s;
}
else
{
p=head;
while((p->value!=a)&&(p->next!=NULL))
{
q=p;
p=p->next;
}
if(p->value == a)
{
q->next = s;
s->next = p;
}
else
{
p->next=s;
s->next=NULL;
}
}
return (head);
}

struct chain *dellink(struct chain *head,int a) //int a代表要删除的节点
{
struct chain *q,*p;
if(head == NULL)
printf("找不到节点!\n");
else if(head->value == a)
{
p = head;
head = head->next;
}
else
{
p=head;
while((p->value!=a)&&(p->next!=NULL))
{
q=p;
p=p->next;
}
if(p->value != a)
printf("链表不存在此节点!\n");
else
{
q->next = p->next;
free(p);
}
}
return (head);
}

void main()
{
struct chain *p,*q;
q=create(); //链表的创建;
//q=inlink(create(),3,1); //链表的插入;
//q=dellink(create(),2); //链表的删除;
while(q){ //输出链表;
printf("%d\n",q->value);
p=q->next;
free(q);
q=p;
}
}
满意请采纳。

❻ 关于c语言链表

因为你只创建了一个啊,你的本意是用create函数执行创建链表的工作,不管多少个都是由它完成的,但是你的create函数明明没有while循环或者dowhile循环啊,只做了一遍啊,第一遍的if做完了,第一个链表完成了,再次scanf了之后,就退出来了啊,在你创建了一个链表之后,就在那个链表的尾部写入NULL了,程序就结束了啊,又没一直做scanf,和创建链表的工作。create没循环啊,打印链表是没错啊,输出了第一个啊,你自己创建的第一个叫head,只有后面的链接,自己本身没有存放任何数,只输出了第二个链表,第二链表的next就是NULL了,输出当然就停止了啊。

怕我没说清楚,或者把你绕晕了,所以我截个图给你看。

你这个if只做了一遍啊,没有循环啊,然后就再次用scanf了,然后呢?然后就退出if了吧,然后就执行了r->next=NULL;对吧,r不就是你创建的第一个有数据的链表吗?然后就return h了,那么只有一个啊,有循环吗?scanf了之后,也没判断数值啊,不是-1,应该继续做啊。

解决方案:在这个if的外面,加一个do while的循环,然后判断scanf读入的n的值,应该就可以了。

❼ 数据结构c语言版链表问题

#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>

struct data {
char num[9]; //停不下来有可能是串定义的小了,输入的数据大了,导致内存混乱!8个数据的串要定义9个空间,给'\0'留个位置
char name[9];
char gender[9];
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语言链表

structLtype
{
intv;
structLtype*pre;
structLtype*next;

}La[200],Lb[100];


main()
{

structLtype*pL,*pLc;

pL=ins_Lb(&La[0],&Lb[0]);

pLc=ins_Lc(&La[0],&Lb[0]);
if(pLc==NULL)
printf(" Error");
}


//第一种,插入到La
structLtype*ins_Lb(structLtype*pa,structLtype*pb)
{
structLtype*pa_head,*pa_temp,*pb_temp,*p;

pa_head=pa;//保存La头;

if(pb==NULL)//Lb为空,直接返回La
returnpa;

if(pa==NULL)//La为空,返回Lb
{
pa=pb;
returnpa;
}

while(pa!=NULL&&pb!=NULL)//循环到一个链表结束
{

if(pa->v>pb->v)//找到非递减位置,插入Lb节点
{

p=pa->pre;//La前一节点
p->next=pb;//La前一节点的下节点为Lb
pb->pre=p;//Lb前一节点为La前一节点
pb_temp=pb->next;//保存Lb的下一节点,为下一循环做准备
pb->next=pa;//Lb的下一节点为La当前节点

pb=pb_temp;//Lb取下一节点,La不变

}

else

{
pa_temp=pa;//保存La的当前非空节点,为La结束连接Lb做准备
pa=pa->next;//La取下一节点,Lb不变
}

}

if(pa==NULL&&pb!=NULL)
{
pa_temp->next=pb;//链接Lb剩余部分。如果Lb为空,La自然保持剩余链接状态
}

returnpa_head;

}

//第三种,新建Lc
structLtype*ins_Lc(structLtype*pa,structLtype*pb)
{
structLtype*pc_head,*p_temp,*p;
inti=0;


//新建Lc节点
p=(structLtype*)malloc(sizeof(structLtype));
if(p==NULL)
{
returnNULL;
}
i++;

pc_head=pc;//保存Lc头;

if(pa==NULL&&pb==NULL)//LaLb为空,直接返回
returnNUll;

while(pa!=NULL&&pb!=NULL)//循环到一个链表结束

{

//新建Lc节点

if(i!=1)//第一个Lc节点已经建立
{
p=(structLtype*)malloc(sizeof(structLtype));

if(p==NULL)
{
free(sizeof(sturctLtype)*i);
returnNULL;
}
i++;

p->pre=pc;
p->next=NULL;
pc->next=p;
pc=p;
}

if(pa->v>pb->v)
{

pc->v=pb->v;//Lb节点值
pb=pb->next;

}
else
{
pc->v=pa->v;//La节点值
pa=pa->next;
}

}

p_temp=pa!=NULL?pa:pb;


while(p_temp!=NULL)
{

//非空链表剩余部分

//新建Lc节点

p=(structLtype*)malloc(sizeof(structLtype));

if(p==NULL)
{
free(sizeof(sturctLtype)*i);
returnNULL;
}
i++;

p->pre=pc;
p->next=NULL;
pc->next=p;
pc=p;

pc->v=p_temp->v;//节点值
p_temp=p_temp->next;

}

returnpc_head;

}

❾ 如何用C语言编写一个链表

#include "stdio.h"
#include "stdlib.h"
#include "malloc.h"

struct Node
{
int data;//数据域
struct Node * next;//指针域
};

/*************************************************************************************
*函数名称:Create
*函数功能:创建链表.
*输入:各节点的data
*返回值:指针head
*************************************************************************************/
struct Node * Create()
{
struct Node *head,*p1,*p2;
head = NULL;
p1 = p2 = (struct Node *)malloc(sizeof(struct Node));
printf("Input the linklist (Input 0 to stop):\n");
scanf("%d",&p1->data);
while(p1->data!=0)
{
if(head == NULL){
head = p1;
}else{
p2->next = p1;
p2 =p1;
}
p1 = (struct Node *)malloc(sizeof(struct Node));
scanf("%d",&p1->data);
}
p2->next = NULL;
return head;
}
/*************************************************************************************
*函数名称:insert
*函数功能:在链表中插入元素.
*输入:head 链表头指针,p新元素插入位置,x 新元素中的数据域内容
*返回值:无
*************************************************************************************/
void insert(struct Node * head,int p,int x)
{
struct Node * tmp = head;
struct Node * tmp2 ;
int i ;
for(i = 0;i<p;i++)
{
if(tmp == NULL)
return ;
if(i<p-1)
tmp = tmp->next;
}
tmp2 = (struct Node *)malloc(sizeof(struct Node));
tmp2->data = x;
tmp2->next = tmp->next;
tmp->next = tmp2;
}
/**************************************************************************************
*函数名称:del
*函数功能:删除链表中的元素
*输入:head 链表头指针,p 被删除元素位置
*返回值:被删除元素中的数据域.如果删除失败返回-1
**************************************************************************************/
int del(struct Node * head,int p)
{
struct Node * tmp = head;
int ret , i;
for(i = 0;i<p;i++)
{
if(tmp == NULL)
return -1;
if(i<p-1)
tmp = tmp->next;
}
ret = tmp->next->data;
tmp->next = tmp->next->next;
return ret;
}
/**************************************************************************************
*函数名称:print
*函数功能:打印链表中的元素
*输入:head 链表头指针
*返回值:无
**************************************************************************************/
void print(struct Node *head)
{
struct Node *tmp;
for(tmp = head; tmp!=NULL; tmp = tmp->next)
printf("%d ",tmp->data);
printf("\n");
}
/**************************************************************************************
*函数名称:main
*函数功能:主函数创建链表并打印链表。
**************************************************************************************/
int main(){
struct Node * head = Create();
print(head);
return 0;
}

❿ C语言里面的链表是什么

C语言里面的链表是一种数据结构
是一种线形的存储结构
链表和数组一样,也是将一组同类型的数据组织在一起的一种数据结构
不同的是
数组采用的是顺序存储,依靠数组的首地址和元素的相对地址(下标)来实现访问
优点是访问方便快捷,而缺点是数组是静态的,不利于实现元素的动态增减。
而链表采用的是离散存储,依靠节点间的指向下一个节点的指针来实现访问。
其优缺点和数组相反