當前位置:首頁 » 編程語言 » c語言鏈表的創建詳解

c語言鏈表的創建詳解

發布時間: 2022-05-14 14:48:20

『壹』 用c語言創建鏈表

主函數這里

LinklistList;
printf("輸入創建鏈表的長度:");
scanf("%d",&num);
CreateList_H(List,num); //創建鏈表
改為
LNodeList;
printf("輸入創建鏈表的長度:");
scanf("%d",&num);
CreateList_H(&List,num); //創建鏈表

函數內在堆上分配好內存,但是 沒有傳遞到棧上

另外你的變數名很迷人

『貳』 C語言 關於鏈表的創建

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

typedefintelemtype;
typedefstructLnode{
elemtypedata;
Lnode*next;
}Lnode;

Lnode*CreatList(Lnode*Head){
Head=(Lnode*)malloc(sizeof(Lnode));
Head->next=NULL;
Lnode*p=Head;
printf("請輸入元素的個數:");
inti,n;
scanf("%d",&n);
for(i=0;i<n;++i){
p->next=(Lnode*)malloc(sizeof(Lnode));
printf("請輸入第%d個元素:",i+1);
scanf("%d",&p->next->data);
p=p->next;
}
p->next=NULL;
returnHead;
}

voidAllList(Lnode*head){
Lnode*p=head->next;
while(p){
printf("%d",p->data);
p=p->next;
}
printf(" ");
}

intmain(){
Lnode*head=NULL;
head=CreatList(head);
AllList(head);
return0;
}

『叄』 c語言創建鏈表的理解

這個是為下一次循環做准備的,其實就是讓pf這個指針指向最後一個節點,這個你應該看出來了
if(i==0)
pf=head=pb;
這里是讓pf這個值只pb這個節點,因為是第一個,所以還需要head也指向這個節點

你這個程序有點小的順序問題,你需要讓pb->next先等於NULL,這個一般建立鏈表是必須的,在malloc一個節點後接著賦值最好,不要在後面處理
else後,就是讓pf->next指向這個心的pd節點
最後,讓pf還是最後一個節點,這時,pd是最後一個節點,所以需要把pd的值賦值給pf

『肆』 c語言 建立鏈表

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

#define ok 1
#define error 0
#define flag 0

typedef int status;

//結構體定義
typedef struct LNode{
char name[16];
int id;
int grade;
struct LNode *next;
}LNode , *LinkList;
int n=0; //n為節點數

//函數聲明
status CreatList_L(LinkList &L); //創建鏈表
status ShowList_L(LinkList L); //展示鏈表

//主函數
void main()
{
printf("\n\n");;
printf("===============zzb鏈表系統.cpp=============\n\n");
LinkList L;
CreatList_L(L);
int b;
int flag1=1;
while (flag1!=0)
{
printf("請選擇進行哪項操作:1.展示鏈表2.刪除指定位置學生信息3.增加指定位置學生信息4.查找指定id學生信息.5.修改學生信息\n");
scanf("%d",&b);
switch (b)
{
case 1:
ShowList_L(L);
break;
break;
default: printf("enter number error!");
}
printf("是否繼續操作(否0/是任意常數):\n");
scanf("%d",flag1);
}
printf("all down!\n");
}//main()

//各功能函數定義
status CreatList_L(LinkList &L)
{
if(!(L=(LinkList)malloc(sizeof(LNode))))
{
printf("error!\n"); return (error);
} //頭指針L
L->next=NULL; //L->next指向NULL,頭結點一般不儲存信息
LinkList p,tail; //指向當前節點指針P與尾指針tail
tail=L; //定義尾指針指向
printf("輸入姓名,學號,成績創建鏈表(以/0 0 0/結束):\n");
p=(LinkList)malloc(sizeof(LNode));
scanf("%c",&p->name);
scanf("%d",&p->id);
scanf("%d",&p->grade);
while(p->id!=flag) //進行對節點數值送數,並以id為0作為結束標志
{
tail->next=p;
p->next=NULL;
tail=p;
n++;
p=(LinkList)malloc(sizeof(LNode)); //生成新節點
scanf("%c",&p->name);
scanf("%d",&p->id);
scanf("%d",&p->grade);
}
printf("創建鏈表成功!\n");
return(ok);
}//CreateLisk_L()

status ShowList_L(LinkList L)
{
LinkList m; //m為指向L->next的指針
m=L->next;
int i=0;
printf("學生信息如下:\n");
printf("姓名\t學號\t成績:\n");
while(i<n)
{
printf("%c\t%d\t%d",m->name,m->id,m->grade);
i++;
m=m->next;
}
printf("輸出完畢!\n");
return (ok);
}//ShowList_L()

應該完成你的要求,你還可以在之後加功能~

『伍』 用c語言建立一個有序鏈表

先按正常流程建立一個鏈表,再按照其某一個成員值進行冒泡排序(排序過程的交換,只交換鏈表指針以外的成員值)。

演示代碼如下:(演示代碼鏈表20個節點,成員值為隨機值)

#include<stdio.h>

#include<stdlib.h>

#include<time.h>

typedef struct slist

{

int a;

struct slist *next;

}SLIST;

SLIST *init();//生成20個節點成員為隨機數的鏈表

void showList(SLIST *slHead);//列印鏈表

void px(SLIST *slHead,int flag);//float=1:降序。=2升序

int main()

{

SLIST *slHead=NULL;

slHead=init();

printf("排序前: ");

showList(slHead);

printf(" 降序排序後: ");

px(slHead,1);

showList(slHead);

printf(" 升序排序後: ");

px(slHead,2);

showList(slHead);

return 0;

}

void px(SLIST *slHead,int flag)//flag=1:降序。=2升序

{

SLIST *sl0=slHead->next,*sl1=NULL,slSave,*pSave=NULL;

while(sl0)

{

sl1=sl0->next;

while(sl1)

{

if((flag==1 && sl0->a<sl1->a)||(flag==2 && sl0->a>sl1->a))

{

slSave=*sl0;

*sl0=*sl1;

sl0->next=slSave.next;

pSave=sl1->next;

*sl1=slSave;

sl1->next=pSave;

}

sl1=sl1->next;

}

sl0=sl0->next;

}

}

void showList(SLIST *slHead)

{

int i=0;

while(slHead->next)

{

printf("節點%d成員值:%d ",++i,slHead->next->a);

slHead=slHead->next;

}

printf(" ");

}

SLIST *init()

{

int num,cnt=20;

static SLIST head;

SLIST *slHead=&head,*slTail=NULL,*slNew=NULL;

slHead->next=NULL;

srand(time(NULL));

while(cnt--)

{

num=rand()%100;

slNew=(SLIST *)malloc(sizeof(SLIST));

if(!slNew)return NULL;

slNew->a=num;

slNew->next=NULL;

if(!slHead->next)

slHead->next=slNew;

else

slTail->next=slNew;

slTail=slNew;

}

return slHead;

}

『陸』 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語言從無到有建立鏈表,求代碼詳解

ST*pNew=(ST*)malloc(sizeof(ST));//為新節點分配存儲空間
printf("請輸入第%d個學生的年齡和成績 ",i+1);
scanf("%d%d",&pNew->age,&pNew->score);//賦值給新節點的內容
tail->next=pNew;//現有的鏈表尾指針指向新節點
tail=pNew;//移動尾指針至新節點
//不會丟失節點,因為鏈表可以用頭指針head遍歷
pNew->next=NULL;//尾節點指針

『捌』 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語言中怎麼定義鏈表,最好把各個代碼都詳細的解釋一下!

/*creat a list*/
#include "stdlib.h"
#include "stdio.h"
struct list
{ int data;
struct list *next;
};
typedef struct list node;
typedef node *link;
void main()
{ link ptr,head;
int num,i;
ptr=(link)malloc(sizeof(node));
ptr=head;
printf("please input 5 numbers==>\n");
for(i=0;i<=4;i++)
{
scanf("%d",&num);
ptr->data=num;
ptr->next=(link)malloc(sizeof(node));
if(i==4) ptr->next=NULL;
else ptr=ptr->next;
}
ptr=head;
while(ptr!=NULL)
{ printf("The value is ==>%d\n",ptr->data);
ptr=ptr->next;
}
}

上面是一個簡單的創建鏈表的C程序。所謂鏈表形象的講就是一個數據塊裡面存有數據,並且存有下一個數據的指針,這樣一個指一個形成一個數據鏈。這個數據鏈可以被操作,例如插入數據,刪除數據,等。至於指令,首先定義一個結構體,它存有數據和指向下一個數據塊的指針。然後分配空間。注意最後一個為NULL,當然你也可以指向開頭一個數據塊形成一個循環鏈表。

熱點內容
手機無線路由器怎麼設置密碼 發布:2025-05-12 05:18:28 瀏覽:815
渝人解壓密碼 發布:2025-05-12 05:18:12 瀏覽:768
備份網站資料庫備份 發布:2025-05-12 05:04:35 瀏覽:52
轉移的存儲卡 發布:2025-05-12 04:51:18 瀏覽:466
c語言大數相加 發布:2025-05-12 04:51:13 瀏覽:588
安卓內存大小有什麼影響 發布:2025-05-12 04:41:36 瀏覽:50
以下c語言常量錯誤的是 發布:2025-05-12 04:40:39 瀏覽:807
怎麼降低qq版本安卓80 發布:2025-05-12 04:40:39 瀏覽:190
一個密碼多少人知道後就不是秘密 發布:2025-05-12 04:26:07 瀏覽:521
ftp埠非21 發布:2025-05-12 04:09:09 瀏覽:229