當前位置:首頁 » 編程語言 » c語言鏈式結構

c語言鏈式結構

發布時間: 2022-04-13 11:52:33

c語言數據結構題目(鏈式結構)

#include"stdio.h"
#include"conio.h"
#include"stdlib.h"
#defineNULL0

typedefstructNode
{
intdata;
structNode*next;
}Node,*linklist;

Node*initlist();
voidcreatelist(Node*head,intn);
voiddisplay(Node*head);
voidinsert(Node*head,intx,inti);

voidmain()
{
Node*head;
intn,x,i,k;
head=initlist();
printf("n=");scanf("%d",&n);

createlist(head,n);
display(head);

printf("i=");scanf("%d",&i);
printf("x=");scanf("%d",&x);
insert(head,x,i);
display(head);

}

Node*initlist()
{
Node*head;
head=(linklist)malloc(sizeof(Node));
head->next=NULL;
return(head);
}

voidcreatelist(Node*head,intn)
{
inti;
Node*p,*s;
p=head;
for(i=1;i<=n;i++)
{
s=(linklist)malloc(sizeof(Node));
scanf("%d",&s->data);//加個取地址符號
s->next=NULL;
p->next=s;
p=s;
}
}

voiddisplay(Node*head)
{
Node*p;
p=head->next;
for(;p!=NULL;)
{
printf("%3d",p->data);
p=p->next;
}
}

voidinsert(Node*head,intx,inti)
{
Node*p,*s;
intj=0;
p=head;
while((p!=NULL)&&(j<i-1))//是i
{
p=p->next;
j++;
}
s=(Node*)malloc(sizeof(Node));
s->data=x;
s->next=p->next;
p->next=s;
}
//很好,就是一個小錯誤!還有疑問的話就追問!

❷ 關於C語言 數據結構中鏈式結構的問題

#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
typedef struct Dian
{
int data;
struct Dian * pnext;
}DIAN,*PDIAN;
void show(PDIAN head)
{
PDIAN p=head->pnext;
while (p)
{
printf("%d ",p->data);
p=p->pnext;
}
}
PDIAN creat_list();
//void traverse_list(PDIAN pHead);
void add_list(PDIAN phead,int val);
void main()
{
PDIAN phead=NULL;
phead=creat_list();
add_list(phead,5);
show(phead);
//traverse_list(phead);
}
PDIAN creat_list()
{
PDIAN phead=(PDIAN)malloc(sizeof(DIAN));
if(phead==NULL)
{
printf("分配內存失敗,程序關閉!\n");
exit(-1);
}
PDIAN pend=(PDIAN)malloc(sizeof(DIAN));
printf("請輸入添加數據:");
scanf("%d",&pend->data);
phead->pnext=pend;
pend->pnext=NULL;
return phead;
}
//往鏈表中添加元素
void add_list(PDIAN phead,int val)
{
PDIAN p=phead;
while(p->pnext!=NULL)
{
p=p->pnext;
}
PDIAN pnew=(PDIAN)malloc(sizeof(DIAN));
if(pnew == NULL)
{
printf("分配內存失敗,程序關閉!\n");
exit(-1);
}
pnew->data=val;
p->pnext=pnew;
pnew->pnext=NULL;
}

❸ c語言鏈表結構體問題

結構體定義指針應該是這樣的: node *p;或者struct Node *p;
在定義/聲明函數時,void as(struct node *p);這樣是不對的。應該是這樣:
void as(struct Node *p);
或者
void as(node *p);
函數調用的時候不用指針直接放入結構體該是這樣調用的:
node stnod;
as(&stnod);
它和
node stnod,*p_stnod;
p_stnod=&stnod;
as(p_stnod);
作用是一樣的。

❹ 用C語言實現定義線性表的鏈式存儲結構

#include<stdio.h>
#include<malloc.h>
typedef struct{
int *elem;
int length;
int listsize;}sqlist;

int init_List(sqlist &L){
L.elem=(int*)malloc(100*sizeof(int));
if(!L.elem) return 0;
else
L.length=0;
L.listsize=100;return 1;}

void main(){
sqlist l;
int *p;int a;int e;int b;
int i;
if(!init_List(l)) printf("內存分配失敗");
else
p=l.elem;
printf("輸入線性表的長度l.length的值:\n");
scanf("%d",&l.length);
printf("輸入%d個數:\n",l.length);
for(i=0;i<l.length;i++)
scanf("%d",p++);
printf("創建的線性表為:\n");
for(i=0;i<l.length;i++)
printf("%d\n",l.elem[i]);}

❺ c語言線性表鏈式結構中如何存儲數據

對於LinkList L: L是指向定義的node結構體的指針,可以用->運算符來訪問結構體成員,即L->elem,而(*L)就是個Node型的結構體了,可以用點運算符訪問該結構體成員,即(*L).elem;

對於LinkList *L:L是指向定義的Node結構體指針的指針,所以(*L)是指向Node結構體的指針,可以用->運算符來訪問結構體成員,即(*L)->elem,當然,(**L)就是Node型結構體了,所以可以用點運算符來訪問結構體成員,即(**L).elem;

在鏈表操作中,我們常常要用鏈表變數作物函數的參數,這時,用LinkList L還是LinkList *L就很值得考慮深究了,一個用不好,函數就會出現邏輯錯誤,其准則是:
如果函數會改變指針L的值,而你希望函數結束調用後保存L的值,那你就要用LinkList *L,這樣,向函數傳遞的就是指針的地址,結束調用後,自然就可以去改變指針的值;
而如果函數只會修改指針所指向的內容,而不會更改指針的值,那麼用LinkList L就行了

❻ C語言二級考試循環鏈表是循環隊列的鏈式存儲結構

循環隊列本身是一種順序存儲結構,而循環列表是一種鏈式存儲結構。兩者之間是平級關系。

線性鏈表是線性表的鏈式存儲結構,包括單鏈表,雙鏈表,循環鏈表等。

隊列的順序存儲結構一般採用循環隊列的形式。

循環隊列的操作是按數組取摸運算的,所以是順序存儲,而循環鏈表本身就是收尾相連的,所以循環鏈表不是循環隊列,兩種不同的存儲結構,雖然實現的功能是一樣的,實現循環兩種方式 順序存儲就是循環隊列,鏈式存儲就是循環鏈表。

(6)c語言鏈式結構擴展閱讀:

1、比順序存儲結構的存儲密度小(鏈式存儲結構中每個結點都由數據域與指針域兩部分組成,相比順序存儲結構增加了存儲空間)。

2、邏輯上相鄰的節點物理上不必相鄰。

3、插入、刪除靈活 (不必移動節點,只要改變節點中的指針)。

4、查找節點時鏈式存儲要比順序存儲慢。

5、每個節點是由數據域和指針域組成。

6、由於簇是隨機分配的,這也使數據刪除後覆蓋幾率降低,恢復可能提高。

❼ c語言問題,什麼是無序線性表什麼是鏈式存儲結構

這是數據結構問題,無序線性表顧名思義就是裡面的元素是無序的一張線性表,就像數組,就是一種線性表,至於線性表的具體知識,建議自己去看一下數據結構,這樣更明白。
鏈式存儲結構跟線性存儲結構相對應。線性存儲結構是在連續的空間中存儲,可以實現順序的查找,鏈式存儲則可以實現在不連續的空間訪問存儲,使用指針就能實現了。
這兩個概念不是C語言問題,這是數據結構的知識,這是很重要的,建議你認真的學習下數據結構就明白了,這兩個概念是最基礎的概念!

❽ c語言怎麼利用 順序或鏈式結構實現中序線索化二叉樹

線索化二叉樹實質就是將二叉樹中的空指針改成指向前驅後者後繼的指針 從而確定二叉樹的唯一性

而前驅後後繼只能在遍歷中才能確定 所以要對二叉樹進行中序遍歷的過程中進行線索化

中序線索化二叉樹源碼

#include "stdio.h"
#include "stdlib.h"
typedef enum piontertag{link,thread};
typedef struct bithrnode
{char data;
piontertag ltag,rtag;
struct bithrnode *lchild,*rchild;
}BithrNODE;
BithrNODE *BithrCreat();//先序遞歸建立二叉樹
BithrNODE *InOrderThreading(BithrNODE *);//中序線索化二叉樹
void InThreading(BithrNODE *);//中序遍歷過程中線索化二叉樹的具體過程
void InOrderTraverse(BithrNODE *);//中序線索化二叉樹輸出
BithrNODE *pre;
int main(void)
{
BithrNODE *a=BithrCreat();
a=InOrderThreading(a);
InOrderTraverse(a);
return 0;
}
BithrNODE *BithrCreat()
{
char x;
BithrNODE *p=NULL;
scanf("%c%*c",&x);
if(x=='#')
return NULL;
p=(BithrNODE *)malloc(sizeof(BithrNODE));
p->data=x;
p->ltag=p->rtag=link;
p->lchild=BithrCreat();
p->rchild=BithrCreat();
return p;
}
BithrNODE *InOrderThreading(BithrNODE *a)
{
BithrNODE *h=(BithrNODE *)malloc(sizeof(BithrNODE ));
if(!h)
exit(-1);
h->ltag=link;
h->rtag=thread;
h->rchild=h;
if(!a) h->lchild=h;
else
{
h->lchild=a;
pre=h;
InThreading(a);
pre->rtag=thread;
pre->rchild=h;
h->rchild=pre;
}
return h;
}
void InOrderTraverse(BithrNODE *a)
{
BithrNODE *p=a->lchild;
while(p!=a)
{
while(p->ltag==link)
p=p->lchild;
printf("%c ",p->data);
while(p->rtag==thread&&p->rchild!=a)
{
p=p->rchild;
printf("%c ",p->data);
}
p=p->rchild;
}
}
void InThreading(BithrNODE *a)
{
if(a)
{
InThreading(a->lchild);
if(!a->lchild)
{
a->ltag=thread;
a->lchild=pre;
}
if(!pre->rchild)
{
pre->rtag=thread;
pre->rchild=a;
}
pre=a;
InThreading(a->rchild);
}
}

❾ 用C語言寫通訊錄,用鏈式結構,包含刪除,查找,插入,顯示功能

# include<stdio.h>
# include<string.h>
struct tongxun
{char name[20];
char number[20];
struct tongxun *next;
};
int all=0;
struct tongxun* tj() /*創建鏈表並添加成員*//**/
{
struct tongxun *head=NULL;
struct tongxun *p,*q;
system("CLS");

p=q=(struct tongxun *)malloc(sizeof(struct tongxun));

for(;;)
{printf("請輸入姓名:(如果輸入0則退出添加)\n");
scanf("%s",p->name);
if(!(strcmp(p->name,"0"))){ free(p);return head;}
else {printf("請輸入電話號碼:\n");
scanf("%s",p->number);
all++;
if(all==1)
{p->next=head;
q=p;
head=q;}
else
{p->next=NULL;
q->next=p;
q=p;
}
p=(struct tongxun *)malloc(sizeof(struct tongxun));
}
}
}
cz(struct tongxun *head) /*查找函數*/
{char name1[20],*a;
struct tongxun *p;
p=head;a=name1;
system("CLS");
printf("請輸入要查找的姓名:\n");
scanf("%s",a);
while(p!=NULL)
{if((strcmp(p->name,a))==0) {printf("姓名:%s\n電話號碼:%s\n",p->name,p->number);return;}
else p=p->next;
}
printf("沒有此人\n");
return;
}

insert(struct tongxun *head) /*插入新成員*/
{struct tongxun* pnew;
pnew=(struct tongxun *)malloc(sizeof(struct tongxun));
while(1)
{printf("請輸入姓名:(如果輸入0則退出添加)\n");
scanf("%s",pnew->name);
if(!(strcmp(pnew->name,"0"))){ free(pnew);return head;}
else {printf("請輸入電話號碼:\n");
scanf("%s",pnew->number);
all++;
pnew->next=head;
head=pnew;
pnew=(struct tongxun *)malloc(sizeof(struct tongxun));
}
}
}
shuchu(struct tongxun *head) /*輸出成員*/
{struct tongxun *p;
p=head;
printf("這里一共有%d個成員\n",all);
while(p!=NULL)
{printf("姓名:%s\n電話號碼:%s\n",p->name,p->number);
p=p->next;
}
}
xg(struct tongxun *head) /*修改成員*/
{char name1[20],*a;
struct tongxun *p;
p=head;a=name1;
system("CLS");
printf("請輸入要修改的姓名:\n");
scanf("%s",a);
while(p!=NULL)
{if((strcmp(p->name,a))==0) {printf("請重新輸入姓名:\n");
scanf("%s",p->name);
printf("請重新輸入電話號碼:\n");
scanf("%s",p->number);return;}
else p=p->next;
}
printf("沒有此人\n");
return;

}
sc(struct tongxun *head) /*刪除成員*/
{char name1[20],*a;
struct tongxun *p,*q;
p=q=head;a=name1;
system("CLS");
printf("請輸入要刪除的姓名:\n");
scanf("%s",a);
while(p!=NULL)
{
if((strcmp(p->name,a))==0) {all--;q->next=p->next;return;}
else {q=p;p=p->next;}
}
printf("沒有此人\n");
return;

}
void main()
{struct tongxun *head;int i;
while(1)
{printf("請選擇:\n");
printf("1.添加 2.查找 3.修改 4.刪除 5.插入 6.輸出\n");scanf("%d",&i);
switch(i)
{case 1:head=tj();break;
case 2:cz(head);break;
case 3:xg(head);break;
case 4:sc(head);break;
case 5:insert(head);break;
case 6:shuchu(head);break;
default:printf("輸入有誤,請重新輸入:\n");break;
}
}
}

熱點內容
密碼箱怎麼鎖住 發布:2025-01-20 16:32:17 瀏覽:31
編譯隔離 發布:2025-01-20 16:28:54 瀏覽:358
從哪裡看自己的qq賬號和密碼 發布:2025-01-20 16:22:33 瀏覽:400
sql語句動態 發布:2025-01-20 16:18:22 瀏覽:298
sql表或的語句 發布:2025-01-20 16:00:49 瀏覽:163
西瓜視頻怎麼緩存不了電影了 發布:2025-01-20 16:00:45 瀏覽:890
javatimer 發布:2025-01-20 15:55:56 瀏覽:64
ts使用什麼編譯器 發布:2025-01-20 15:54:59 瀏覽:382
資料庫中已存在 發布:2025-01-20 15:35:44 瀏覽:110
壓縮超過密度 發布:2025-01-20 15:35:33 瀏覽:648