當前位置:首頁 » 存儲配置 » 單鏈表可以做什麼的存儲

單鏈表可以做什麼的存儲

發布時間: 2024-07-06 22:25:38

① 數據結構c語言 用單鏈表儲存一元多項式,並實現兩個多項式的相加運算(語法沒有錯誤)可能指針錯了

void Add(LinkList *P1,LinkList *P2,LinkList *&P3)裡面的演算法有點問題!

我依照你的演算法,補充了一下程序!裡面新編寫了一個函數void CopyList(LinkList * a,LinkList *b) ;
同時void Add(LinkList *P1,LinkList *P2,LinkList *&P3做了一點修改!也許,程序的可讀性不好,你可以自己再修改!代碼如下:

#include<stdio.h>
#include <malloc.h>
#define MAX 20 //多項式最多項數
typedef struct{
double ratio;
int exp;
} ElemType;
typedef struct LNode
{
ElemType data;
struct LNode *next;
} LinkList;
void CreateListR(LinkList *&L,ElemType a[],int n)
{ LinkList *s,*r;
int i;
L=(LinkList *)malloc(sizeof(LinkList));
r=L;
for (i=0;i<n;i++)
{ s=(LinkList *)malloc(sizeof(LinkList));
s->data=a[i];
r->next=s;
r=s;
}
r->next=NULL;
}
/*
將一個鏈表的部分或全部結點復制到另一個鏈表中,
a是新鏈表的最後一個結點,b是被復制鏈表的某一結點
即讓要復制的結點加到新鏈表的尾部*/
void CopyList(LinkList * a,LinkList *b) //
{
LinkList *temp,*last; //temp臨時指針,last指向新鏈表的最後一個結點
last=a;
/*循環體中實現從結點b開始到鏈表結束,將各結點復制到新鏈表中*/
while(b!=NULL)
{
temp=(LinkList *)malloc(sizeof(LinkList)); //新建一個結點
temp->data=b->data; //將鏈表當前要復制的結點b復制到新結點中
last->next=temp; //將新建的結點加到新鏈表的末端
last=temp; //last指向尾結點,剛才新建的結點已成為新鏈表的尾結點
b=b->next; //遍歷鏈表的下一個結點b
}
last->next=NULL; //新鏈表尾結點中next指針的值設為NULL,即新鏈表創建完成
}
void DestroyList(LinkList *&L) //銷毀鏈表
{
LinkList *pre =L, *p=L->next;
while (p != NULL)
{
free(pre);
pre = p;
p = pre->next;
}
free(pre);
}
void DispList(LinkList *L)
{ LinkList *p=L->next;
while (p!=NULL)
{ printf("%fx^%d ",p->data.ratio,p->data.exp);
p=p->next;
}
printf("\n");
}
void Add(LinkList *P1,LinkList *P2,LinkList *&P3)
{ LinkList *p=P1->next,*q=P2->next;
LinkList *head; //鏈表P3的頭指針
head=(LinkList *)malloc(sizeof(LinkList)); //新建頭結點
P3=head;
int i;
for (i = 0; i<MAX; i++)
{
P1=(LinkList *)malloc(sizeof(LinkList)); //新建一個結點
P3->next=P1; //將新建的結點加到合並後鏈表中
P3=P1;

/*注意這里是'<',鏈表的結點已經從小到大排列有序,
每次比較都選擇較小的結點加到合並後的鏈表P3中*/

if ((p->data.exp)<(q->data.exp))
{
P3->data.exp = p->data.exp;
P3->data.ratio = p->data.ratio;
if (p->next!=NULL) //如果鏈表P1的下一個結點存在,則遍歷下一個結點
p = p->next;
else //否則,將另一個鏈表P2剩餘的結點加到鏈表P3中,鏈表P3建立完成
{
CopyList(P3,q);
break;
}
}

/*下面其他兩種情況的處理都是同一個道理,
在比較過程中,只要其中一個鏈表的所有結點都遍歷了,
此時只需要將另一個鏈表的剩餘結點都加到P3中,就可以完成鏈表的合並
*/

else if ((p->data.exp) == (q->data.exp))
{
P3->data.ratio = (p->data.ratio) + (q->data.ratio);
P3->data.exp = p->data.exp;
if (p ->next!= NULL)
p = p->next;
else
{
CopyList(P3,q->next);
break;
}
if (q->next != NULL)
q = q->next;
else
{
CopyList(P3,p->next);
break;
}
}
else{
P3->data.exp = q->data.exp;
P3->data.ratio = q->data.ratio;
if (q->next != NULL)
q= q->next;
else
{
CopyList(P3,p);
break;
}
}
}
/*在建立鏈表過程中,指針P3的值一直在改變,因此在完成合並鏈表後必須使P3指向頭結點*/
P3=head;
}
void BubbleSort(ElemType st[],int n)
{
int i, j;
ElemType tmp;
for (i = 0; i < n; i++)
{
for(j=n-1;j>i;j--)
if(st[j].exp<st[j-1].exp)
{
tmp=st[j];
st[j]=st[j-1];
st[j - 1] = tmp;
}
}
}
void main()
{
int num1=5, num2=5;
LinkList *L1, *L2, *L3;
L1 = (LinkList *)malloc(sizeof(LinkList));
L2 = (LinkList *)malloc(sizeof(LinkList));
L3 = (LinkList *)malloc(sizeof(LinkList));
ElemType st1[] = { {5,5}, {4,4}, {7,7}, {6,6}, {2,2} };
ElemType st2[] = { {5,5}, {8,8}, {7,7}, {3,3}, {2,2} };
BubbleSort(st1, num1);
BubbleSort(st2, num2);
CreateListR(L1, st1, num1);
CreateListR(L2, st2, num2);
DispList(L1);
DispList(L2);
Add(L1, L2, L3);
DispList(L3);
DestroyList(L1);
DestroyList(L2);
DestroyList(L3);

}

② 鍦ㄧ嚎鎬ц〃瀛樺偍涓錛屼負浠涔堥噰鐢ㄥ彧鏈夊熬鎸囬拡鐨勫崟寰鐜閾捐〃瀛

鏌愮嚎鎬ц〃涓鏈甯哥敤鐨勬搷浣滄槸鍦ㄦ渶鍚庝竴涓鍏冪礌涔嬪悗鎻掑叆涓涓鍏冪礌鍜屽垹闄ょ涓涓鍏冪礌錛屽垯閲囩敤浠呮湁灝炬寚閽堢殑鍗曞驚鐜閾捐〃瀛樺偍鏂瑰紡鏈鑺傜渷榪愩傞塂銆

浠呮湁灝炬寚閽堢殑鍗曞驚鐜閾捐〃錛屽彲浠ラ潪甯告柟渚垮湴鎵懼埌灝劇粨鐐癸紝灝劇粨鐐瑰悗闈㈢殑絎涓涓緇撶偣寰寰鏄澶寸粨鐐癸紝澶寸粨鐐圭殑涓嬩竴涓緇撶偣灝辨槸絎綰挎ц〃鐨勭涓涓緇撶偣銆傚規渶鍚庝竴涓鍏冪礌鍜岀涓涓鍏冪礌鎿嶄綔瀵瑰甫灝炬寚閽堢殑鍗曞驚鐜閾捐〃鏄闈炲父鏂逛究鐨勩

鎵╁睍璧勬枡錛

綰挎ц〃涓鏁版嵁鍏冪礌涔嬮棿鐨勫叧緋繪槸涓瀵逛竴鐨勫叧緋伙紝鍗抽櫎浜嗙涓涓鍜屾渶鍚庝竴涓鏁版嵁鍏冪礌涔嬪栵紝鍏跺畠鏁版嵁鍏冪礌閮芥槸棣栧熬鐩告帴鐨勶紙娉ㄦ剰錛岃繖鍙ヨ瘽鍙閫傜敤澶ч儴鍒嗙嚎鎬ц〃錛岃屼笉鏄鍏ㄩ儴銆傛瘮濡傦紝寰鐜閾捐〃閫昏緫灞傛′笂涔熸槸涓縐嶇嚎鎬ц〃錛堝瓨鍌ㄥ眰嬈′笂灞炰簬閾懼紡瀛樺偍錛屼絾鏄鎶婃渶鍚庝竴涓鏁版嵁鍏冪礌鐨勫熬鎸囬拡鎸囧悜浜嗛栦綅緇撶偣錛夈

鑻ョ嚎鎬ц〃闇瑕侀戠箒鏌ユ壘錛屽緢灝戣繘琛屾彃鍏ュ拰鍒犻櫎鎿嶄綔鏃訛紝瀹滈噰鐢ㄩ『搴忓瓨鍌ㄧ粨鏋勩傝嫢闇瑕侀戠箒鎻掑叆鍜屽垹闄ゆ椂錛屽疁閲囩敤鍗曢摼琛ㄧ粨鏋勩

褰撶嚎鎬ц〃涓鐨勫厓緔犱釜鏁板彉鍖栬緝澶ф垨鑰呮牴鏈涓嶇煡閬撴湁澶氬ぇ鏃訛紝鏈濂界敤鍗曢摼琛ㄧ粨鏋勶紝榪欐牱鍙浠ヤ笉闇瑕佽冭檻瀛樺偍絀洪棿鐨勫ぇ灝忛棶棰橈紝濡傛灉鐭ラ亾澶ц嚧闀垮害錛屽疁閲囩敤欏哄簭瀛樺偍緇撴瀯銆

③ 什麼是單鏈表,儲存上有哪些特點

單鏈表是一種鏈式存取的數據結構,用一組地址任意的存儲單元存放線性表中的數據元素。
祝好運,望採納

熱點內容
密碼萬能鑰匙的密碼怎麼看密碼 發布:2024-11-26 03:46:12 瀏覽:998
wds橋接後副路由器如何改無線密碼 發布:2024-11-26 03:41:54 瀏覽:474
編程要求電腦什麼配置高 發布:2024-11-26 03:41:09 瀏覽:467
抗解壓模擬器軟體下載 發布:2024-11-26 03:27:33 瀏覽:933
python獲取文件列表 發布:2024-11-26 03:18:28 瀏覽:222
減刑演算法 發布:2024-11-26 03:18:27 瀏覽:182
微信登錄忘記密碼怎麼辦啊 發布:2024-11-26 03:15:31 瀏覽:108
編碼與加密 發布:2024-11-26 03:07:45 瀏覽:873
蘋果7照片怎麼加密碼 發布:2024-11-26 02:44:57 瀏覽:932
葯網源碼 發布:2024-11-26 02:39:28 瀏覽:876