當前位置:首頁 » 服務存儲 » c語言單鏈表的存儲
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

c語言單鏈表的存儲

發布時間: 2022-08-31 21:45:09

『壹』 數據結構(c語言)用單鏈表存儲一元多項式,並實現兩個多項式的相加運算,怎麼做

#include<stdio.h>

#include<stdlib.h>

#include<malloc.h>

typedef int ElemType;

/*單項鏈表的聲明*/

typedef struct PolynNode{

int coef; // 系數

int expn; // 指數

struct PolynNode *next; }PolynNode,*PolynList;

/*正位序(插在表尾)輸入n個元素的值,建立帶表頭結構的單鏈線性表*/

/*指數系數一對一對輸入*/ void CreatePolyn(PolynList &L,int n)

{

int i;

下載

原文檔已轉碼為如下格式,以便移動設備查看

數據結構(c語言)用單鏈表存儲一元多項式,並實現兩個多項式的相加運算【最新】

閱讀:1037次 頁數:36頁 2016-03-21 舉報

#include<stdio.h>

#include<stdlib.h>

#include<malloc.h>

typedef int ElemType;

/*單項鏈表的聲明*/

typedef struct PolynNode{

int coef; // 系數

int expn; // 指數

struct PolynNode *next; }PolynNode,*PolynList;

/*正位序(插在表尾)輸入n個元素的值,建立帶表頭結構的單鏈線性表*/

/*指數系數一對一對輸入*/ void CreatePolyn(PolynList &L,int n)

{

int i;

PolynList p,q;

L=(PolynList)malloc(sizeof(PolynNode)); // 生成頭結點

L->next=NULL;

q=L;

printf("成對輸入%d個數據 ",n);

for(i=1;i<=n;i++)

{

p=(PolynList)malloc(sizeof(PolynNode));

scanf("%d%d",&p->coef,&p->expn); //指數和系數成對輸入

q->next=p;

q=q->next;

}

p->next=NULL;

}

// 初始條件:單鏈表L已存在

// 操作結果: 依次對L的每個數據元素調用函數vi()。一旦vi()失敗,則操作失敗

void PolynTraverse(PolynList L,void(*vi)(ElemType, ElemType)) {

PolynList p=L->next;

while(p)

{

vi(p->coef, p->expn);

if(p->next)

{

printf(" + "); //「+」號的輸出,最後一項後面沒有「+」

}

p=p->next;

}

printf(" ");

}

/*ListTraverse()調用的函數(類型要一致)*/ void visit(ElemType c, ElemType e) {

if(c != 0)

{

printf("%dX^%d",c,e); //格式化輸出多項式每一項

}

}

/* 多項式相加,原理:歸並 */ /* 參數:兩個已經存在的多項式 */ /* 返回值:歸並後新的多項式的頭結點 */

PolynList MergeList(PolynList La, PolynList Lb) {

PolynList pa, pb, pc, Lc;

pa = La->next;

pb = Lb->next;

Lc = pc = La; // 用La的頭結點作為Lc的頭結點

while(pa&&pb)

{

if(pa->expn < pb->expn)

{

pc->next = pa; //如果指數不相等,pc指針連上指數小的結

點,

pc = pa;

pa = pa->next; //指向該結點的指針後移

}

else if (pa ->expn > pb->expn )

{

pc->next = pb; //pc指針連上指數小的結點,

pc = pb;

pb = pb->next; //指向該結點的指針後移

}

else //(pa ->expn = pb->expn )

{

pa->coef = pa->coef + pb->coef; //指數相等時,系數相加

pc->next = pa;

pc = pa;

pa = pa->next; //兩指針都往後移

pb = pb->next;

}

}

pc->next = pa ? pa:pb; // 插入剩餘段

return Lc;

}

void main()

{

PolynList ha,hb,hc;

printf("非遞減輸入多項式ha, ");

CreatePolyn(ha,5); // 正位序輸入n個元素的值

printf("非遞減輸入多項式hb, ");

CreatePolyn(hb,5); // 正位序輸入n個元素的值

『貳』 數據結構線性表的單鏈表存儲結構

線性表是一種數據元素有序的邏輯結構,通常採用順序存儲結構和鏈式存儲結構。線性表採用順序存儲結構時,有利用線性表長度的計算、線性表數據元素的存取和數據元素的遍歷,同時也從物理結構上反映了線性表數據元素的邏輯結構,有點類似於c語言中的數組,但是採用順序存儲結構時,插入和刪除數據元素時,要移動較多的數據元素;採用鏈表結構存儲的線性表,克服了插入和刪除數據元素時要移動較多元素的缺點,其只要尋找到需要插入和刪除的數據元素處,處理相應的指針就可以實現數據元素的插入和刪除,同時也和順序存儲的線性表一樣方便遍歷,但是其不利於計算線性表的長度,線性表的鏈表存儲結構有以下幾種常見類型:採用帶頭指針和頭結點的單鏈表、採用僅帶頭指針的單鏈表、帶頭指針和頭結點的循環鏈表、帶頭指針和尾結點的循環鏈表、雙向鏈表等形式。在實際應用中,結合順序表易於計算表長和鏈表易於插入和刪除的特點,實際一般採用兩者結合的一種單鏈表,其鏈表類型為帶有頭指針(含頭結點)和尾指針,以及含有線性表長度的分量,在一元多項式的運算中採用的就是這種鏈式存儲結構。此外,還有一種一般應用於無指針的高級語言中的靜態單鏈表的存儲結構。

『叄』 C語言中鏈表的存儲、讀取、修改問題

1、鏈表存到文件中去後,再取出來是不是要再次對各個元素進行鏈表的關聯(就是下一個元素地址賦予前一個元素中的地址變數中)?有沒有更簡單的方法讓其自動恢復原先的鏈表關系?
答:鏈表的關系的卻需要重新建立,沒有別的方法,這里只需要重新設置,因為鏈表是存儲在內存中的,每次malloc出來的指針地址不一致,無法存儲到文件中,下次繼續使用。

2、編輯前,是否需要將整個文件流從文件中都讀取至堆里去,連立成一個鏈表?如果文件很大,大過內存怎麼辦?
答:文件中存儲的是整個鏈表的信息,你只需要每次讀出一個struct就可以了。這個malloc出來的struct中你需要讀取一個index的值,然後以這個index的值再建立一個鏈表,將原來那個malloc出來的struct可以釋放,這樣就可以不用擔心文件很大,怕內存不足的情況。因為即使你的鏈表再長,一個int值足以表示。如果怕int(4位元組)不夠,可以用double類型,甚至可以用鏈表嵌套。

3、如果整個文件都讀出至堆中,並關聯成了鏈表,那麼修改後用fwrite()再次保存至文件中時,是不是把原來的記錄都覆蓋了還是在後面追求啊?
答:這里寫文件就看你自己是怎麼打開文件了。(存儲的時候是不是按照struct大小存儲還是按照實際數據大小存儲)最好的方式是可以隨便修改,這種方式最難,因為要考慮到更改的是第幾個位元組。最簡單的方式,直接將文件刪除,重新建立,但是這樣就必須要將所有數據讀取到內存中。

如果你要實現問題2中的方法,則問題3即要做大量的修改。

『肆』 C語言如何用動態鏈表儲存數據

單鏈表,雙鏈表,堆
都可以,不過看您要存儲什麼數據
以單鏈表為例:
定義一個節點結構
typedef
struct
LNode{
ElementType
date;
struct
Lnode
*next;
}Lnode;
然後用malloc開辟需要的節點空間,把數據存進去就可以了
p
=
(Lnode)
malloc
(sizeof(Lnode));
//開辟一個節點,p為所開辟空間的指針
至於查找,從頭節點開始q
=
p->next
;一個個查就行了。

『伍』 C語言的鏈表數據如何保存在文件中

可以將鏈表的結構按順序讀出來存放在文件中,在家載的時候讀文件然後重新生成鏈表結構就可以了

『陸』 C語言中如何將一個鏈表保存為文件

第一步:創建文件 比如說 file *fp=fopen(……);
第二步:寫一個循環,把鏈表的節點一個一個寫進文件里。
第三部:記得關閉文件- -

『柒』 C語言中怎樣用鏈表保存結構體數據(動態數據結構)

鏈表有多種形式,如:單向鏈表,雙向鏈表,單向循環鏈表,雙向循環鏈表。將鏈表結構定義為list_t,則該類型中一定(至少)存在一個指向下一節點的指針list_t
*next;除了這個指針,list_t
中可以包含其它類型的數據,包括結構體變數。比如:typedef
struct
{
struct
usr_struct
data;
list_t
*next;
}
list_t;

『捌』 關於C語言中,鏈表數據的文件儲存和提取。

當把鏈表已經確定的時候,就可以依次存入文件。

和平時鏈表的遍歷一樣,每讀取一個節點內容就進行一次存入操作。

不過要注意幾個部分的檢查:

  1. 內存空間是否分配成功

  2. 是否成功存入到文件中

  3. 在工作完成之後,是否將以後不會用到的變數清空和刪除。


按照問題要求的代碼如下:

Consumer*read_list()

{

FILE*fp;

if((fp=fopen("CONSUMER.dat","rb"))==NULL)

{

printf("無法讀取CONSUMER.dat ");

returnNULL;

}

intsign;

Consumer*s,*p,*head;


head=(Consumer*)malloc(SIZE_C);

if(head==NULL)

{

printf("讀取失敗!內存空間申請不足! ");

returnNULL;

}

fseek(fp,0,SEEK_END);

if(ftell(fp)==0)

{

returnNULL;

}

p=head;

p->next=NULL;

while(feof(fp))

{

s=(Consumer*)malloc(SIZE_C);

//fread(s,SIZE_C,1,fp);

fread(s,sizeof(char),SIZE_C,fp);

p->next=s;

p=s;

p->next=NULL;

}

fclose(fp);

returnhead;

}//讀取文件到鏈表

intsave_consumer(Consumer*p)

{

FILE*fp;

Consumer*head;

head=p;//p為已經構建好的鏈表

//if((fp=fopen("CONSUMER.dat","ab+"))==NULL)

if((fp=fopen("CONSUMER.dat","wb"))==NULL)

{

printf("無法打開CONSUMER.dat! ");

return-1;

}

while(p!=NULL)

{

//fwrite(p,SIZE_C,1,fp);

fwrite(p,sizeof(char),SIZE_C,fp);

p=p->next;

}

fclose(fp);

return1;

}//儲存鏈表到文件

『玖』 單鏈表存儲結構的C語言定義是具體是指什麼

數據的存儲方式有兩種,順序存儲和鏈式存儲,當然單鏈表也是鏈式存儲中的一種,單鏈表存儲結構的c語言定義應該是用c語言去描述一個單鏈表。