『壹』 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