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