當前位置:首頁 » 編程語言 » c語言鏈表圖

c語言鏈表圖

發布時間: 2023-05-20 05:30:46

c語言鏈表問題 如,運行答案是3-4-1-2 最好能附上圖中鏈表圖①②兩個式子的鏈表圖盡量詳細!

while循環外,困缺隱鏈表為

k四次循環後為4

p1->num 如圖為 3

p1=p1->next;

所以輸出為 3 4 1 2

⑵ 求c語言鏈表的詳細講解

鏈表是一種常見的重要的數據結構.它是動態地進行存儲分配的一種結構.我們知道,用數組存放數據時,
必須事先定義固定的長度(即元素個數).比如,有的班級有100人,而有的班只有30人,如果要用同一個數組先後存放不同班級的學生數據,則必須定義長度為100的數組.如果事先難以確定一個班的最多人數,則必須把數組定得足夠大,以能存放任何班級的學生數據.顯然這將會浪費內存.鏈表則沒有這種缺點,它根據需要開辟內存單元.圖10.11表示最簡單的一種鏈表(單向鏈表)的結構.鏈表有一個"頭指針"變數,圖中以head表示,它存放一個地址.
該地址指向一個元素.鏈表中每一個元素稱為"結點",每個結點都應包括兩個部分:一為用戶需要用的實際數據做備大,二為下一個結點的地址.課以看出,head指向第一個元素;第一個元素又指向第二個元素;……,直到最後一個元素,該元素不再指向其它元素,它稱為'表尾",它的地址部分放一個"NULL"(表示"空地址").鏈表到此結束.
可以看到:鏈表中各元素在內存中滾配可以不是連續存放的.要找某一元素,必須先找到上一個元素,根據它提供的下一元素地址才能找到下一個元素.
如果不提供"頭指針"(head),則整個鏈表都無法訪問.鏈表如同一條鐵鏈一樣,一環扣一環,中間是不能斷開的.打個通俗的比方:幼兒園的老師帶領孩子出來散步,老師牽著第一個小孩的手,第一個小孩的另一隻手牽著第二個孩子,……,這就是一純豎個"鏈",最後一個孩子有一隻手空著,他是"鏈尾".要找這個隊伍,必須先找到老師,然後順序找到每一個孩子.

⑶ c語言鏈表,非常感謝

//WIN-TC是什麼turbo? 我在DEV-C下改的,應該也沒問題吧
#include<stdio.h>
#include<malloc.h>
//#define NULL 0 //不用重定義NULL把,空指針用NULL就可以
struct student
{
int num;
char name[20];
float score;
struct student *next;
};
int n=0;
/*建立動態鏈表*/

/* 這個函數猛殲,有重要的問題,你在函數里創建了臨時類,st,head指向它,但是當這個函數結束時,這個類會被銷毀,head將是個沒有指向的指針,所以當在明知旦函數中返回類時,需要堆分配內存
*/
struct student *creat(void)
{
struct student *p1=NULL,*head=NULL; // 這里一個學生類指針即可
struct student *st = (struct student *)malloc(sizeof(struct student)); //同上解釋
printf("Please input records:\n");
scanf("%d%s%f",&(st->num),st->name,&(st->score));
p1=st;
p1->next = NULL;
if(st->num!=0)
head=p1;
while(p1->num!=0)
/*這個鏈表的創立,無非就是那些步驟,你必然明白,再不行,畫個示意圖就明白了,注意的是,什麼時候指針賦值,什麼時候用指針控制變數
*/
{n=n+1;
printf("%dEnd\n",n);

p1->next = (struct student *)malloc(sizeof(struct student));
//這句話至少得有一個「->」,需要控制變數

p1->next->next = NULL;
scanf("%d%s%f",&(p1->next->num),p1->next->name,&(p1->next->score));
if(n!=1)
{
p1 = p1->next;

}
}

printf("\nOver.\n");
/*printf("%o\激擾n",head);
if(head!=NULL)
printf("%10d%10s%10.1f\n",head->num,head->name,head->score);*/
return(head);
}
/*輸出*/
void print(struct student *head)
{
struct student *p;
p=head;
/*printf("%o\n",head);*/
getch();
//if(head==NULL)
//printf("\nList null!\n");
//else
printf("\nNow,there are %d records:\n",n);
while(p!=NULL)
{
printf("%10d%10s%10.1f\n",p->num,p->name,p->score);
p=p->next;
}
}
int main()
{
struct student *head;
head=creat();
/*printf("%o\n",head);
if(head!=NULL)
printf("%10d%10s%10.1f\n",head->num,head->name,head->score);*/
print(head);
getch();

return 0;
}

/*還有些小問題,如應該創建個銷毀鏈表函數,使堆中內存被釋放,等
但不影響達到效果,做個示意夠了
*/

⑷ c語言 鏈表流程圖 怎麼畫呀

你一步步往下分,流程圖不就出來了,比如你的例子:
首先就是p1->number,即p1指向的結點
分不等於0,小於0,等於0 三種情況,

然後再往下分,比如p1->number!=0時
=>n=n+1
判斷n
如果為真怎麼樣,為假又怎麼樣(繼續走)。。。。

就是麻煩點,一步步來流程圖就出來。不過。。。這種東西用流程圖表示,太麻煩了吧。。。

⑸ C語言 如圖 鏈表 這個程序表示什麼作用

這題建立了一段咐陵個頭節點握戚保存值的鏈表,鏈表中每一個節點保存的信息有學號,姓名和成績。
沒有輸出部分,如果要查看鏈表中的數據,需要編寫輸簡氏出。

⑹ 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語言建立一個有序鏈表

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

演示代碼如下:(演示代碼鏈表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語言鏈表,不太懂,畫圖解釋一下這道題

structnode*ave(structnode*h,int*count){
structnode*p1;//不需要p2
floatsume=0,sum=0;
*count=0;
if(h==塌鎮埋NULL)returnNULL;
p1=h;
while(p1!=NULL){//(19):直接填p1也有同樣的效果
sume+=p1->English;
sum+=p1->math;
p1=p1->next;//(20):向前移動指針
}//原代碼中缺少這個右括弧,真是害人不淺
//接下來將新建的結點添加到原鏈表的頭部,並返團螞回該旅謹結點地址
}

⑼ C語言用鏈表進行數據錄入,圖片第三張是我的問題,希望大神能給我畫個示意圖。

head指向頭結點,返回head時返回head指向的鏈表;
head在開辟空間是就已經指向了頭結點,後面使用的是p1,p2之類的指針指向head(也就是指向頭結點),對鬧乎p1,p2操作也就是對head指向的節點所在的鏈表進行操明坦作,返回時返液槐悉回head,沒毛病

熱點內容
python成員函數 發布:2024-05-01 01:26:03 瀏覽:376
編程貓小愛 發布:2024-05-01 01:25:18 瀏覽:31
pythonwhile 發布:2024-05-01 00:04:25 瀏覽:729
c語言用中文寫代碼能編譯通過嗎 發布:2024-04-30 23:59:18 瀏覽:536
小X分身存儲隔離 發布:2024-04-30 23:54:50 瀏覽:757
安卓電話錄音怎麼使用 發布:2024-04-30 23:42:38 瀏覽:413
windows運行python 發布:2024-04-30 23:38:18 瀏覽:783
節奏大師安卓腳本 發布:2024-04-30 23:25:18 瀏覽:421
ftp上傳進度 發布:2024-04-30 23:11:23 瀏覽:883
python網頁抓取 發布:2024-04-30 23:11:02 瀏覽:886