c語言鏈表
A. c語言鏈表
嗨 又是個新注冊的號 太不可信了 這年頭新注冊的號 真是不靠譜
沒准辛辛苦苦做出來的題目 卻被不了了之了 缺乏誠信啊
B. C語言裡面的鏈表是什麼
C語言裡面的鏈表是一種數據結構
是一種線形的存儲結構
鏈表和數組一樣,也是將一組同類型的數據組織在一起的一種數據結構
不同的是
數組採用的是順序存儲,依靠數組的首地址和元素的相對地址(下標)來實現訪問。
優點是訪問方便快捷,而缺點是數組是靜態的,不利於實現元素的動態增減。
而鏈表採用的是離散存儲,依靠節點間的指向下一個節點的指針來實現訪問。
其優缺點和數組相反
C. c語言鏈表的用途是什麼
1、鏈表是一種物理存儲單元上非連續、非順序的存儲結構,數據元素的邏輯順序是通過鏈表中的指針鏈接次序實現的。鏈表由一系列結點(鏈表中每一個元素稱為結點)組成,結點可以在運行時動態生成。每個結點包括兩個部分:一個是存儲數據元素的數據域,另一個是存儲下一個結點地址的指針域。 相比於線性表順序結構,鏈表比較方便插入和刪除操作。
2、常式:
/*
*對鏈表的綜合操作
*功能有建立,排序,插入,刪除,輸出
*/
#include<stdio.h>
#include<malloc.h>
typedefintElemType;
typedefstructNodeType
{
ElemTypedata;
structNodeType*next;
}NodeType,*LinkType;
LinkTypecreate()
{//建立鏈表,返回鏈表的首地址,頭結點沒有數據
LinkTypehead,p1,p2;
head=(LinkType)malloc(sizeof(NodeType));
p1=head;
while(p1->data!=0)//當data=0時鏈表結束
{
p2=p1;
p1=(LinkType)malloc(sizeof(NodeType));
printf("Enterstudent'sinformation: data=");
scanf("%d",&p1->data);
p2->next=p1;
}
p2->next=NULL;
free(p1);
return(head);
}
voidoutput(LinkTypehead)
{//鏈表的輸出,接收鏈表的首地址
head=head->next;
while(head!=NULL)
{
printf("data=%d ",head->data);
head=head->next;
}
}
LinkTypesort(LinkTypehead)
{//鏈表排序,接收鏈表首地址,返回鏈表首地址
LinkTypeph,p1;
ElemTypetemp;
ph=head->next;
p1=head->next;
while(p1->next!=NULL)//冒泡法
{
ph=head;
while(ph->next!=NULL)
{
if(ph->data>ph->next->data)//按data由小到大排序
{
temp=ph->data;
ph->data=ph->next->data;
ph->next->data=temp;
}
ph=ph->next;
}
p1=p1->next;
}
return(head);
}
LinkTypedel(LinkTypehead)
{//刪除結點,接收鏈表的首地址,返回鏈表的首地址
ElemTypeDelData;
LinkTypeph,p;
ph=head->next;
printf("Enterthedatayouwanttodel: DelData=");
scanf("%d",&DelData);
while(ph!=NULL&&ph->data!=DelData)//尋找要刪除的結點
{
p=ph;
ph=ph->next;
}
if(ph==NULL)//沒有找到要刪除的結點
{
printf("Entererror! ");
return(head);
}
else
{
if(ph==head->next)//刪除頭結點
{
head->next=ph->next;
}
else//刪除其它結點
{
p->next=ph->next;
}
}
free(ph);
return(head);
}
LinkTypeinsert(LinkTypehead)
{//插入結點,接收鏈表首地址,返回鏈表首地址
LinkTypeph,p,insert,temp;
insert=(LinkType)malloc(sizeof(NodeType));
printf("Enterthedatayouwanttoinsert: data=");
scanf("%d",&insert->data);
ph=head->next;
while(ph!=NULL&&ph->data<insert->data)//尋找插入的位置
{
p=ph;
ph=ph->next;
}
if(head->next->data>insert->data)//插入頭部
{
temp=head->next;
head->next=insert;
insert->next=temp;
}
else//插入到其它地方
{
p->next=insert;
insert->next=ph;
}
return(head);
}
voidmain()
{
LinkTypehead;
head=create();
output(head);
printf(" ");
head=sort(head);
output(head);
printf(" ");
head=del(head);
output(head);
printf(" ");
head=insert(head);
output(head);
}
D. c語言中的鏈表是什麼
就是一連續內存空間,類似於數組,不過數組的內存空間一旦初始化就是不變的。
鏈表開始是一個「頭指針」,定義了鏈表開始的位置,下面是像鏈條一樣的一串節點,每個節點包含數據部分和指針部分。前一節點的指針指向後一節點,最後一個節點是數據和空地址,表示結束。
好處在於空間是動態分配的,需要多長可以一直鏈下去。
E. C語言鏈表的使用方法
D
答案D設置完,p就從鏈表中丟掉了。
p就是一個指向結構體node的指針。
p->next就是p包含的執行下一個node的指針,在本題,就是q。
F. C語言 鏈表
/*
卡號 姓名
44098 譚侃
99089 馬吹
23011 趙忽悠
q
44098 譚侃
99089 馬吹
23011 趙忽悠
Press any key to continue
*/
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
typedefstructcard{
intcardnum;//卡號
charstudentname[30];//學生姓名
structcard*next;//指針域
}SCard;
SCard*Create(){
SCard*head,*p;
intid;
charname[30];
head=p=(SCard*)malloc(sizeof(SCard));
printf("卡號姓名 ");
while(scanf("%d%s",&id,name)==2){
p->next=(SCard*)malloc(sizeof(SCard));
p->next->cardnum=id;
strcpy(p->next->studentname,name);
p=p->next;
}
p->next=NULL;
returnhead;
}
voidShow(SCard*head){
SCard*p=head->next;
while(p){
printf("%d %s ",p->cardnum,p->studentname);
p=p->next;
}
}
intmain(){
SCard*head=Create();
if(head->next==NULL)printf("faileure ");
elseShow(head);
return0;
}
G. C語言鏈表概念
struct node
{
int data;
struct node *next;
}
這個是一個鏈表的定義,next就是本身的一個指針
可以這么理解,鏈表就是一串珠子,每個珠子就是一個結構體,next就是串珠子的線
H. 關於c語言鏈表
因為你只創建了一個啊,你的本意是用create函數執行創建鏈表的工作,不管多少個都是由它完成的,但是你的create函數明明沒有while循環或者dowhile循環啊,只做了一遍啊,第一遍的if做完了,第一個鏈表完成了,再次scanf了之後,就退出來了啊,在你創建了一個鏈表之後,就在那個鏈表的尾部寫入NULL了,程序就結束了啊,又沒一直做scanf,和創建鏈表的工作。create沒循環啊,列印鏈表是沒錯啊,輸出了第一個啊,你自己創建的第一個叫head,只有後面的鏈接,自己本身沒有存放任何數,只輸出了第二個鏈表,第二鏈表的next就是NULL了,輸出當然就停止了啊。
怕我沒說清楚,或者把你繞暈了,所以我截個圖給你看。
你這個if只做了一遍啊,沒有循環啊,然後就再次用scanf了,然後呢?然後就退出if了吧,然後就執行了r->next=NULL;對吧,r不就是你創建的第一個有數據的鏈表嗎?然後就return h了,那麼只有一個啊,有循環嗎?scanf了之後,也沒判斷數值啊,不是-1,應該繼續做啊。
解決方案:在這個if的外面,加一個do while的循環,然後判斷scanf讀入的n的值,應該就可以了。
I. C語言鏈表
#include<stdio.h>
#include<stdlib.h>
#defineN8
typedefstructlist
{intdata;
structlist*next;
}SLIST;
SLIST*insertlist(SLIST*p,int*pvalue)
{
SLIST*tmp=p,*tmp_p;
intt=*pvalue;
while(tmp->next!=NULL&&tmp->next->data<t)
tmp=tmp->next;
tmp_p=(SLIST*)malloc(sizeof(SLIST));
tmp_p->next=tmp->next;
tmp_p->data=t;
tmp->next=tmp_p;
returnp;
}
SLIST*creatlist(int*a)
{
SLIST*h,*p,*q;inti;
h=p=(SLIST*)malloc(sizeof(SLIST));
for(i=0;i<N;i++)
{q=(SLIST*)malloc(sizeof(SLIST));
q->data=a[i];
q->next=NULL;
p->next=q;
p=q;
}
p->next=0;
returnh;
}
voidoutlist(SLIST*h)
{
/*這里輸出鏈表中各個數據*/
SLIST*tmp=h->next;
while(tmp!=NULL){
printf("%d",tmp->data);
tmp=tmp->next;
}
}
intmain(void)
{
SLIST*head;
inta[N];
intnvalue,i;
for(i=0;i<N;i++)
{
scanf("%d",&a[i]);
}
scanf("%d",&nvalue);//插入的結點數據
head=creatlist(a);
head=insertlist(head,&nvalue);
outlist(head);
return0;
}
J. c語言鏈表
指針在x86系統里大小是32位4個位元組,在64位系統是8位元組大小。指針好比一個盒子,盒子里有個東西也就是它指向的內容,內容是一個實體對象的首地址。盒子本身不能存放實體對象,就好比盒子里有張名片,通過名片你可以找到這個人,總不能把人放盒子里吧。
得有這個人然後把找到這個人的名片放盒子里。