??xml version="1.0" encoding="utf-8" standalone="yes"?> 2.24 假设有两个按元素值递增有序排列的线性表A和BQ均以单链表作存储结构,L(fng)写算法将A表与B表归q成一个按元素值递减有序(即非递增有序Q允许表中含有值相同的元表)排列的线性表CQƈ要求利用原表(即A表与B?的结点空间构造C表?/p>
分析Q对两个或两个以上,l点按元素值递增/减排列的单链表进行操作时Q应采用"指针qUd、一ơ扫描完?的策略。且链表A与链表B的长度大不一定相{?/p>
代码Q?/p>
#include<iostream>
using namespace std;
typedef int ElemType;
//两个递增的链表合q成递增的链表?nbsp;
typedef struct LNode
{
ElemType data;
struct LNode *next;
}
LNode;
typedef LNode *LinkList;
void CreatList(LinkList &L,int n)
{
LinkList p,q;
L=new LNode;
L->next=NULL;
q=L;
cout<<"请从到大输入链表的元素Q?/span>";
for (int i=1;i<=n;i++)
{
p=new LNode;
cin>>p->data;
p->next=q->next;
q->next=p;
q=q->next;
}
cout<<"所创徏得的递增有序链表为:(x)";
p=L->next;
for (int j=1;j<=n;j++)
{
cout<<p->data<<" ";
p=p->next;
}
cout<<endl;
}
void CreatC(LinkList &A,LinkList &B,LinkList &C,int n)
{
LinkList pa,pb,pc,pre=NULL/*Cl点的上一个结?/span>*/,q/*t*/;
pa=A->next;
pb=B->next;
// C=t=A;// A
while (pa||pb)
{
if (!pb||((pa&&pb)&&(pa->data<pb->data)))
{
////A的元素插入新?nbsp;
pc=pa;
q=pa->next;
pa->next=pre;
pa=q;
}
else
{
pc=pb;
q=pb->next;
pb->next=pre;
pb=q; //B的元素插入新?nbsp;
}
pre=pc;
}
cout<<"合ƈ后的递减有序链表为:(x)";
C=A;
A->next=pc;
pa=pc;
for (int j=1;j<=n;j++)
{
cout<<pa->data<<" ";
pa=pa->next;
}
cout<<endl;
getchar();
}
void main()
{
LinkList A,B,C;
int n,m,k;
cout<<"误入链?**A***的长度:(x)";
cin>>n;
CreatList(A,n);
cout<<"误入链?**B***的长度:(x)";
cin>>m;
CreatList(B,m);
k=m+n;
CreatC(A,B,C,k);
system(0);
getchar();
}
W一?/font>
W??概论——1Q概c逻辑l构、存储)
下蝲rm
pdf
W二?/font>
W??概论——2Q存储结构,ADTQ算法特征,法量度Q?/font>
下蝲rm
W三?/font>
W??U性表、栈和队?#8212;—1Q?/font>U性表ADT和存储结构)
下蝲rm
pdf
W四?/font>
W?/font>2?U性表、栈和队?#8212;—2Q?/font>栈的存储和应用)
下蝲rm
W五?/font>
W?/font>2?U性表、栈和队?#8212;—3Q?/font>栈和表达?栈和递归Q?/font>
下蝲rm
W六?/font>
W?/font>2?U性表、栈和队?#8212;—4Q?/font>栈和递归,队列Q?/font>
下蝲rm
W七?/font>
W?/font>3?字符?#8212;—1Q?/font>字符串概cADT、简单模式匹配)
下蝲rm
pdf
W八?/font>
W?/font>3?字符?#8212;—2Q?/font>模式匚w、KMP法Q?/font>
下蝲rm
W九(ji)?/font>
W?/font>4?二叉?#8212;—1Q?/font>二叉?wi)的概念和ADTQ?/font>
下蝲rm
pdf
W十?/font>
W?/font>4?二叉?#8212;—2Q?/font>二叉?wi)的周游Q?/font>
下蝲rm
W十一?/font>
W?/font>4?二叉?#8212;—3Q?/font>二叉?wi)的非递归后序周游Q?/font>
下蝲rm
W十二讲
W?/font>4?二叉?#8212;—4Q?/font>二叉?wi)的q度周游Q二叉树(wi)实现和穿U二叉树(wi)Q?/font>
下蝲rm
W十三讲
W?/font>4?二叉?#8212;—5Q?/font>二叉?wi)的U烦化)
下蝲rm
W十四讲
W?/font>4?二叉?#8212;—6Q?/font>二叉搜烦?wi)?/font>
下蝲rm
W十五讲
W?/font>4?二叉?#8212;—7Q?/font>堆)
下蝲rm
W十六讲
W?/font>4?二叉?#8212;—8Q?/font>Huffman?wi)?/font>
下蝲rm
W十七讲
W???#8212;—1Q?/font>?wi)的基本概念和周游?/font>
下蝲rm
pdf
W十八讲
W???#8212;—2Q?/font>?wi)的q度周游和存储)
下蝲rm
W十?ji)?/font>
W???#8212;—3Q?/font>?wi)?序存储、带右链先根Q?/font>
下蝲rm
W二十讲
W???#8212;—4Q?/font>?wi)?左链层次ơ序表示,带度数后??wi)计敎ͼ?/font>
下蝲rm
W二十一?/font>
W???#8212;—1Q?/font>囄概念Q?/font>
下蝲rm
pdf
W二十二?/font>
W???#8212;—2Q?/font>囄存储和周游)
下蝲rm
W二十三?/font>
W???#8212;—3Q?/font>囄拓扑排序Q?/font>
下蝲rm
W二十四?/font>
W???#8212;—4Q?/font>囄单源最短\径Dijstra法Q?/font>
下蝲rm
W二十五?/font>
W???#8212;—5Q?/font>囄Floyd法和最支持树(wi)的prim法Q?/font>
下蝲rm
W二十六?/font>
W???#8212;—6Q?/font>囄kruskal法Q?/font>
下蝲rm
W二十七?/font>
W??内排?#8212;—1Q?/font>内排序基本概念和插入排序Q?/font>
下蝲rm
pdf
W二十八?/font>
W??内排?#8212;—2Q?/font>二分插入排序,冒排序和shell排序Q?/font>
下蝲rm
W二十九(ji)?/font>
W??内排?#8212;—3Q快?/font>排序Q?/font>
下蝲rm
W三十讲
W??内排?#8212;—4Q?/font>归ƈ排序Q?/font>
下蝲rm
W三十一?/font>
W??内排?#8212;—5Q堆排序 、桶式排序)
下蝲rm
W三十二?/font>
W??内排?#8212;—6Q基?/font>排序Q?/font>
下蝲rm
W三十三?/font>
W??内排?#8212;—7Qȝ、地址排序Q?/font>
下蝲rm
W三十四?/font>
W??文g理和外排序——1Q文件的基本概念Q?/font>
下蝲rm
pdf
W三十五?/font>
W??文g理和外排序——2Q置换选择排序、二路归q、选择?wi)?/font>
下蝲rm
W三十六?/font>
W??文g理和外排序——3Q|Ҏ(gu)(wi)Q多路归qӞ
下蝲rm
W三十七?/font>
W???#8212;—1Q检索的基本概念Q顺序检索)
下蝲rm
pdf
W三十八?/font>
W???#8212;—2Q集合检索,散列函数Q开散列法)
下蝲rm
W三十九(ji)?/font>
W???#8212;—3Q闭散列Q探算法)
下蝲rm
W四十讲
W?0?索引——1Q烦引基本概念,U性烦引,倒排索引Q?/font>
下蝲rm
pdf
W四十一?/font>
W?0?索引——2QB?B+?wi)?/font>
下蝲rm
W四十二?/font>
W?0?索引——3QB+?wi),索引的性能分析Q?/font>
下蝲rm
W四十三?/font>
W?1?高U性表——1Q多l数l,矩阵Q广义表Q内存管理)
下蝲rm
pdf
W四十四?/font>
W?2?高?wi)结?#8212;—1QTrie?wi),最佳二叉搜索树(wi)Q?/font>
下蝲rm
pdf
W四十五?/font>
W?2?高?wi)结?#8212;—2QAVL?wi)?/font>
下蝲rm
W四十六?/font>
W?2?高?wi)结?#8212;—3QAVL?wi)的效率Q?自组l数据结构,伸展?wi),决策树(wi)?/font>
下蝲rm
多维数组
1、数l(向量Q?#8212;—常用数据cd
一l数l(向量Q是存储于计机的连l存储空间中的多个具有统一cd的数据元素?br /> 同一数组的不同元素通过不同的下标标识?br /> Qa1,a2,…,an)
2、二l数l?/strong>
二维数组Amn可视为由m个行向量l成的向量,或由n个列向量l成的向量?br />
二维数组中的每个元素aij既属于第i行的行向量,又属于第j列的列向量?br />
3、多l数l?/strong>
三维数组Amnp可视Z二维数组为数据元素的向量。四l数l可视ؓ(f)以三l数lؓ(f)数据元素的向?#8230;…
三维数组中的每个元素aijk都属于三个向量。四l数l中的每个元素都属于四个向量……
4、数l的序存储方式
׃计算机内存是一l的Q多l数l的元素应排成线性序列后存h存储器?br /> 数组一般不做插入和删除操作Q即l构中元素个数和元素间关pM变化。一般采用顺序存储方法表C数l?br />Q?Q行优先序
数l元素按行向量排列,Wi+1个行向量紧接在第i个行向量后面?br /> 【例】二l数lAmn的按行优先存储的U性序列ؓ(f)Q?br /> a11,a12,…,a1n,a21,a22,…,a2n,……Qam1,am2,…Qamn
注意Q?/font>
①PASCAL和C语言中,数组按行优先序存储?br /> ②行优先顺序推q到多维数组Q可规定为先排最右的下标?br />
Q?Q列优先序
数l元素按列向量排列,Wi+1个列向量紧接在第i个列向量后面?br /> 【例】二l数lAmn的按列优先存储的U性序列ؓ(f)Q?br /> a11,a21,…,am1,a12,a22,…,am2,……Qa1n,a2n,…Qamn
注意Q?br /> ①FORTRAN语言中,数组按列优先序存储?br /> ②列优先顺序推q到多维数组Q可规定为先排最左的下标?br />
5、数l元素的地址计算公式
Q?Q按行优先顺序存储的二维数组Amn地址计算公式
LOC(aij)=LOC(a11)+[(i-1)×n+j-1]×d
其中Q?br /> ①LOC(a11)是开始结点的存放地址Q即基地址Q?br /> ②d为每个元素所占的存储单元?br /> ③由地址计算公式可得Q数l中M元素可通过地址公式在相同时间内存取。即序存储的数l是随机存取l构?br />
Q?Q按列优先顺序存储的二维数组Amn地址计算公式
LOC(aij)=LOC(a11)+[(j-1)×m+i-1]×d
Q?Q按行优先顺序存储的三维数组Amnp地址计算公式
LOC(aijk)=LOC(a111)+[(i-1)×n×p+(j-1)×p+k-1]×d
Q?Q下界不?的二l数l的地址计算公式
①二维数组A[c1..d1,c2..d2]的地址计算公式Q?br /> LOC(aij)=LOC(ac1c2)+[(i-c1)×(d2-c2+1)+j-c2]×d
②下界?的二l数l的地址计算公式QC语言中用)
LOC(aij)=LOC(a00)+[i×(d2+1)+j]×d
注意Q?/font>
以下讨论的数l存储结构都以C语言下标表示?br />#include <iostream>
typedef struct __node {
int value;
__node* next;
} NODE, *PNODE;
PNODE reverse(PNODE head) {
if (!head) {
return head;
}
PNODE curNode = head;
PNODE nextNode = head->next;
head->next = NULL;
while (nextNode) {
PNODE afterNextNode = nextNode->next;
nextNode->next = curNode;
curNode = nextNode;
nextNode = afterNextNode;
}
return curNode;
}
PNODE reverse_recursionA(PNODE head) {
if (head == NULL || head->next == NULL) {
return head;
}
PNODE temp = reverse_recursionA(head->next);
head->next = temp->next;
temp->next = head;
return head;
}
PNODE reverse_recursionB(PNODE head) {
if (head == NULL || head->next == NULL) {
return head;
}
PNODE temp = reverse_recursionB(head->next);
head->next->next = head;
return temp;
}
PNODE reverse_recursionC(PNODE cur, PNODE pre) {
if (NULL == cur) {
return pre;
}
PNODE temp = cur->next;
cur->next = pre;
return reverse_recursionC(temp, cur);
}
void printList(PNODE head) {
PNODE curNode = head;
while (curNode) {
std::cout << curNode->value << ' ' << std::flush;
curNode = curNode->next;
}
std::cout << std::endl;
}
int main() {
PNODE head = new NODE();
head->value = 0;
head->next = NULL;
PNODE tail = head;
for (int index = 1; index != 100; ++index) {
PNODE newNode = new NODE();
newNode->value = index;
newNode->next = head;
head = newNode;
}
std::cout << "Original: " << std::endl;
printList(head);
head = reverse(head);
std::cout << "After reverse: " << std::endl;
printList(head);
tail = head;
head = reverse_recursionB(head);
tail->next = NULL;
std::cout << "After one reverse_recrusionB: " << std::endl;
printList(head);
reverse_recursionA(head);
PNODE temp = head;
head = tail;
tail = temp;
std::cout << "After reverse_recursionA: " << std::endl;
printList(head);
tail = head;
head = reverse_recursionC(head, NULL);
std::cout << "After reverse_recursionC: " << std::endl;
printList(head);
PNODE curNode = head;
while (curNode) {
PNODE temp = curNode->next;
delete curNode;
curNode = temp;
}
return 0;
}
To use this zip file, in the menu Help->SoftwareUpdates->Find and Install..., select Search for new features to install, click New Archived Site..., and point at the zip file. The Update Manager will start up and you can select the features you want to install. You will at nead require the C/C++ Development Tooling feature which is the CDT runtime.
更多版本的cdt下蝲Q?a >http://download.eclipse.org/tools/cdt/builds/
/Files/jjshcc/mingw-get-inst-20120426.rar
/Files/jjshcc/mingw-get-inst-20110530.rar