對鍊錶的操作(資料結構線性表演算法設計練習)

2022-09-02 05:24:10 字數 2842 閱讀 3163

/*1.有乙個單鏈表(不同結點的資料域值可能相同),其頭指標為head,編寫乙個函式計算資料域為x的結點個數*/

#include #include using namespace std;

struct node;

struct node *head;

/*計算資料域為x的結點個數*/

int list_count (int x)

p=p->next;

}return count;

}int main()

/*列印這個鍊錶*/

t= head;

printf("你輸入的data為: \n");

while(t!=null)

printf("\n");

printf("輸入要計數的資料域x\n");

int x;

scanf("%d",&x);

printf("資料域為%d的節點個數為%d",x,list_count(x));

return 0;

}/*2.有乙個有序單鏈表(從小到大排序),表頭指標為head,編寫乙個函式向該單鏈表中插入乙個元素為x的結點,使插入後該鍊錶仍然有序。*/

#include #include using namespace std;

struct node;

int main()

scanf("%d",&a);

t= head;

while(t!=null)

t=t->next;

}t=head;

while(t!=null)

return 0;

}/*3.編寫乙個函式將乙個頭指標為a的單鏈表a分解成兩個單鏈表a和b,其頭指標分別為a和b,使得a

鍊錶中含有原鍊錶a中序號為奇數的元素,而b鍊錶中含有原鍊錶a中序號為偶數的元素,且保持原來的相對順序。*/

#include #include using namespace std;

struct node

*hda,*hdb;

void text()

tmp->next=null;

printf("\n");

}void print()

void div(node *a,node *b)

ta->next=tb->next=null;

return ;

}int main()

/*4.假設有兩個已排序的單鏈表a和b,編寫乙個函式將它們合併成乙個鍊錶c而不改變其排序性。*/

node *p, *q;

node *mergelink()

else

if (p= =null)

r->next=q;

if (q= =null)

r->next=p;

return h;

}node *mergelink(p, q);

/*5. 設a=(a ,…,a )和b=(b ,…,bn)均為順序表,a』和b』分別為a和b中除去最大共同字首後的子表(例如,a=(x,y,y,z,x,z),

b=(x,y,y,z,y,x,x,z),則兩者中最大的共同字首為(x,y,y,z),在a』=b』=空表,則a=b;若a』=空表,而b』<>空表,或者兩者均不為

空表,且a』的首元小於b』的首元,則ab。(詞典次序)試寫乙個比較a,b大小的演算法(在演算法中,不要破壞原表a和b,並且不一定先求得a』和b』才進行比較)。*/

typedef struct sqlist;

char compare(sqlist a, sqlist b)

else

break;

}if(!a.elem[i] && !b.elem[j]) return '=';

if(a.elem[i] > b.elem[j]) return '>';

if(a.elem[i] < b.elem[j]) return '<';

}}/*6.設有乙個用向量表示的線性表l,要求寫出乙個將該表逆置的過程,並允許在原表的儲存空間外再增加乙個附加的工作單元。*/

void convertlist( seqlist *l)

}/*7.已知兩個整數集合a和b,它們的元素分別依元素值遞增有序存放在兩個單鏈表ha和hb中,編寫乙個函式

/*思路:處理好三種大於等於小於的情況就行了*/

node*ha,*hb,*hc;

void union(ha,ha,hc)

else if(p->data>q->data)

else //相等的情況,取其中乙個,然後後移

}if(p==null)

while(q!=null)

if(q==null)

while(p!=null)

r->next=null;

s=hc;

hc=hc->next;

free(s);

}/*8.已知兩個順序表a和b分別表示兩個集合,其元素遞增排列,編寫乙個函式求出a和b的交集c,要求c同樣以元素遞增的順序表形式儲存。*/

/*思路:釆用歸併的思想,設定兩個工作指標pa和pb,對兩個鍊錶進行歸併掃瞄,只有同時出現在兩集合中的元素才鏈結到結果表中且僅保留乙個,

其他的結點全部釋放。當乙個鍊錶遍歷完畢後,釋放另乙個表中剩下的全部結點。比較兩個節點時,小的節點指標後移一位*/

linklist intersection(linklist &la,linklist &lb)

else if (pa->datadata) else

} //while 結束

while(pa)

while(pb)

pc->next=null;

free (lb) ;

return la;

}

線性表的基本操作(陣列實現)

typedef intposition typedef struct lnode list struct lnode 初始化 list makeempty 查詢 define error 1 position find list l,elementtype x 插入 bool insert list...

鍊錶的基礎操作(資料結構,C語言)

include include struct link void link init link head 鍊錶初始化 void link build link head 前插法輸入鍊錶 void link build2 link head 後插法輸入鍊錶 void link print link h...

資料結構 線性表 鍊錶

在之前了解完什麼是資料結構之後 資料結構 線性表 順序表 陣列 我們再來看看線性結構另外一種實現方式 鍊錶順序表中的鍊錶沒有物理上的連續儲存要求,只需要在儲存資料時通過 鏈 的方式將資料進行連線,而這個 鏈 的實現就是通過指標來實現的。鍊錶的連續儲存方式 對於抽象資料型別來說,每一種資料結構都有自己...