导航:首页 > 创造发明 > c创造链表

c创造链表

发布时间:2021-08-08 23:43:46

『壹』 c语言创建链表

1、你使用了malloc函数但没有导入头文件malloc.h。
2、函数DATA *create(int n);没有申明就直接调用。
(另外main函数中DATA* head;给个初值NULL,避免野指针。)
修改以上内容,亲测可运行。

『贰』 用c语言创建链表

void CreateList_H(Linklist L,int n)中的L是局部变量,你生成的头结点L不能被返回,应该改为:
Linklist CreateList_H(int n)
调用方式和函数内部返回值都需要相应改动。

『叁』 C语言如何创建单链表

C语言创建单链表如下:

#include"stdio.h"

#include"stdlib.h"

#include"malloc.h"

#include "iostream.h"

typedef struct node

{

intdata;

node * next;

}node , * List;

void create(int n)

{

int c;

List s,L;

L=(List)malloc(sizeof(node));

L->next=NULL;

printf("请输入第1个数据:");

scanf("%d",&c);

L->data=c;

for(int i=2;i<=n;i++)

{

s=(List)malloc(sizeof(node));

printf("请输入第%d个数据:",i);

scanf("%d",&c);

s->data=c;

s->next=L;

L->next =s;

}

printf("链表创建成功!");

}

void main()

{

int n;

printf("请你输入链表的个数:");

scanf("%d",&n);

create(n);

}

『肆』 在c语言中如何创建一个链表

typedef struct Node
{
int data;
struct Node*pNext;
}Node;
Node*pNode=(Node*)malloc(sizeof(Node));

『伍』 c语言链表的创建

这个链表做得不好。其实链表可以不用创建这一步。因为插入操作已经包含有创建功能了。else后面的语句,就如同你给绳子打结一样。链表的节点好比一段一段的绳子,现在你需要把它们都接起来。你每接一段,手就要往后移动一节,以准备给下一段打结。else后面的语句,其实就是让当前指针指向的节点后移。
我给你个程序:
#include <stdio.h>
#include <stdlib.h>

typedef struct tagPERSON //个人信息结构
{
char name[20];
long age;
}PERSON;

//template<typename DT> //如果是C++的话,这里方便许多,可以使用模板和类
typedef struct tagLNODE* pLNODE;
typedef struct tagLNODE //链表节点
{
PERSON data;
pLNODE next;
}LNODE;

int link_insert(pLNODE *head,PERSON data)//链表插入
{
pLNODE cur_tmp,lnode_tmp;

cur_tmp=*head;
lnode_tmp=(pLNODE)malloc(sizeof(LNODE));
if(lnode_tmp==NULL)return -1;
lnode_tmp->data=data;
lnode_tmp->next=NULL;

if(*head==NULL)
*head=lnode_tmp; //如果head为空,则需要对main()中的head修改,所以head的类型为指向指针的指针
else
{
while(cur_tmp->next!=NULL)
cur_tmp=cur_tmp->next;
cur_tmp->next=lnode_tmp;
}

return 0;
}

int link_display_cmd(pLNODE head) //控制台下的链表显示
{
pLNODE cur_tmp;

cur_tmp=head;
while(cur_tmp!=NULL)
{
printf("%s:%d\n",(cur_tmp->data).name,(cur_tmp->data).age);
cur_tmp=cur_tmp->next;
}
return 0;
}

int link_clear(pLNODE *head) //清空链表
{
pLNODE cur_tmp,old_tmp;

cur_tmp=*head;
while(cur_tmp!=NULL)
{
old_tmp=cur_tmp;
cur_tmp=cur_tmp->next;
free(old_tmp);
}

*head=NULL;
return 0;
}

int main(void)
{
pLNODE head=NULL;
PERSON temp;

printf("Please input the name:");
scanf("%s",temp.name);
printf("Please input the age:");
scanf("%d",&(temp.age));
while(temp.age>0)
{
link_insert(&head,temp);
printf("Please input the name:");
scanf("%s",temp.name);
printf("Please input the age:");
scanf("%d",&(temp.age));
}

link_display_cmd(head);
link_clear(&head);

return 0;
}

『陆』 急~~~数据结构用C语言创建链表

#include<stdio.h>
#include<stdlib.h>
typedef struct node *pointer;
struct node
{
int data;
pointer next;
};
pointer next,null,p,L,s,q;
int j,e,n,k;
creater(int n)
{
int i;
L=(struct node *)malloc(sizeof(struct node));
L->next-null;
s=L;
for(i=1;i<=n;i++)
{printf("\n输入数据%d:",i);
scanf("%d",&k);
p=(struct node *)malloc(sizeof(struct node));
p->data=k;
s->next=p;
s=p;
}
p->next=null;
}
print()
{pointer p;
p=L->next;
while(p)
{printf("\n%d",p->data);
p=p->next;
}
printf("\n");
}
insert(int i,int e)
{if(i<1||i>n+1)printf("不存在 i\n");
else
{j=0;p=L;
while(j<i-1)
{p=p->next;j++;}
q=(struct node *)malloc(sizeof(struct node));
q->data=e;
q->next=p->next;
p->next=q;
}
}
delete(int i,int e)
{if(i<1||i>n)printf("不存在 i\n");
else
{j=0;p=L;
while(j<i-1)
{p=p->next;j++;}
q=p->next;
p->next=q->next;
e=q->data;
free(q);
printf("e=%d\n",e);
}
}
main()
{int i=1;
while(i)
{printf(" 1--代表建立新的链表 \n");
printf(" 2--代表添加元素\n");
printf(" 3--代表删除元素\n");
printf(" 4--代表输出当前表中的元素\n");
printf(" 0--代表退出\n");
printf(" 请选择!\n");
scanf("%d",&i);
switch(i)
{case 1:printf("n="); /*初始化链表的时候,n代表你想要输入的数据个数*/
scanf("%d",&n);
creater(n);
print();break;
case 2:printf("i=");
scanf("%d",&i);
printf("input e");
scanf("%d",&e);
insert(i,e);
print();break;
case 3:printf("i=");
scanf("%d",&i);
delete(i,e);
print();break;
case 4:print();break;
case 0:return;break;
default:printf("ERROR!Try again!\n\n");
}
}
getch();
}

『柒』 C程序创建链表

实验证明你的“感觉”是错误的,当然不是必须输入0,0才可以,但是逗号前面的必须是0,逗号后面的东西可以任意,原因可以在f()函数中找到,自己研究一下下面的程序即可知晓。

//---------------------------------------------------------------------------

#include <stdio.h> /*注意这里*/
#include<malloc.h>
#define LEN sizeof(struct list)

struct list
{char number[8];
char name[10];
struct list *next;
};
int n;

struct list *f(void)
{struct list *p1,*p2,*head;
p1=(struct list *)malloc(LEN);
head=NULL;p2=p1;n=0;
scanf("%7[^,]%*c%9[^\n]%*c",p1->number,p1->name); /*注意这里*/
while(strcmp(p1->number,"0")) /*注意这里*/
{n=n+1;
if(n==1) head=p1;
else p2->next=p1;
p2=p1;
p1=(struct list *)malloc(LEN);
scanf("%[^,]%*c%[^\n]%*c",p1->number,p1->name); /*注意这里*/
}
p2->next=NULL;
return(head);
}
void p(struct list *s) /*输出链表*/
{
if (s!=NULL) {
printf("%s:%s\n",s->name,s->number);
p(s->next );
}
}
main()
{struct list *a;
a=f(); /*创建链表,输入数据的格式为,每行一组数据,每组数据是由逗号分隔的两个字符串,以0,0结束输入*/
putchar('\n');
p(a); /*输出*/
}

//---------------------------------------------------------------------------

『捌』 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>
#defineN8
typedefstructlist
{
intdata;
structlist*next;
}SLIST;

SLIST*creatlist(int*a)
{
/*这里仅仅是创建,不能在这里输出数据*/
//在这里首先创建头结点
//在这里新建有效结点
inti=0;
SLIST*head,*r,*p;
head=(SLIST*)malloc(sizeof(SLIST));
r=p=head;
for(i=0;i<N;i++)
{
p=(SLIST*)malloc(sizeof(SLIST));
p->data=*(a+i);
p->next=NULL;
r->next=p;
r=p;
}
returnhead->next;
}
voidoutlist(SLIST*h)
{
/*这里输出链表中各个数据*/
while(h)
{
printf("%d",h->data);
h=h->next;
}
}

intmain(void)
{
SLIST*head;
inta[N],i;
for(i=0;i<N;i++)
{
scanf("%d",&a[i]);
}
head=creatlist(a);
outlist(head);
return0;
}
12345678
12345678Pressanykeytocontinue

阅读全文

与c创造链表相关的资料

热点内容
无形资产年限怎么确定 浏览:542
工商登记人员工作总结2018 浏览:799
我要发明机器人300字 浏览:341
转让合作书 浏览:512
上海联瑞知识产权代理有限公司宁波分公司 浏览:364
西安私人二手挖机转让 浏览:698
债务股权转让 浏览:441
食堂转让合同范本 浏览:335
广西华航投资纠纷 浏览:902
萌分期投诉 浏览:832
金软pdf期限破解 浏览:730
马鞍山学化妆 浏览:41
胶州工商局姜志刚 浏览:786
了解到的发明创造的事例 浏览:391
2012年中国知识产权发展状况 浏览:773
合肥徽之皇知识产权代理有限公司 浏览:636
天津企兴知识产权待遇 浏览:31
二项基本公共卫生服务项目试题 浏览:305
基本公共卫生服务考核标准 浏览:543
公共卫生服务考核评估办法 浏览:677