1、今天给同学写 5 个数据结构算法的题.感觉很有价值的几个题.感兴趣的坐下。 1.判断一个顺序表是否对称2 用向量作存储结构,设计以算法仅用一个辅助结点,实现将线性表中的结点循环右移 k位的运算3.已知 A【n】中的元素为整形。设计算法将其调整为左右两部分。左边所有元素为奇数,右边所有元素为偶数,4,设计以算法,逆置带头结点的动态链表 L,5 单链表以非递减有序排列,设计算法实现在单链表中删去值相同的多余结点,6 假设有两个按元素值递增有序排列的线性表 A 和 B,均以单链表作存储结构,是编写算法将 A 表和 B 表归并成一个按元素值递减有序排列的线性表 C,并要求利用原表的结点空间存放 C我写
2、的代码如下1 、/*要求 :判断一个顺序表是否对称 */#include using namespace std ;#define MAX_SIZE 200 template bool IsSymmetrical(T List,int length); /利用模板可以比较任意类型的顺序表void main() int group= 0;bool *pGroup=NULL;/保存的是比较的结果int *pNum =NULL; /这里以整形顺序表为例int nCount=0 ;/每组数据的个数/coutgroup; pGroup=new boolgroup ; /动态分配数组内存保存对称比较结果f
3、or(int n=0;nnCount ;pNum=new intnCount ; /动态为每行数据分配内存 for(int m=0;mpNumm; pGroupn=IsSymmetrical(pNum,nCount) ; /直接将函数返回结果的 bool 值保存在动态分配的数组中delete pNum ;/ 第一组内存使用完毕释放掉 防止内存泄露 for(n=0;n bool IsSymmetrical(T List,int length) /利用模板可以比较任意类型的顺序表 int l=0;for(int n=0;n#include using namespace std ;#include
4、 “windows.h“struct Node /节点数据int data; ;void main() vector List; /向量的定义 int size ;/接收输入的大小coutsize ;Node *pArray=NULL ;/接受输入的数据pArray=new Nodesize ; for(int n=0;npArrayn.data ;List.push_back(pArrayn) ; /插入数据vector:iterator p=List.begin() ;/返回迭代器 我们可以通过迭代器访问 vectorsystem(“cls“);/清除屏幕coutmove ;move=mo
5、ve%size ; /取模Node tem ;List.insert(p,move,tem) ; /在前面插入 5 个临时节点 p=List.begin(); /迭代到第一个节点/算法实现部分size=List.size();int m=0; for(n=size-move ,m=0;nusing namespace std;#define MAX_SIZE 100void SetArray(int arr,int length) ;/算法实现函数void main()cout回车 “回车结束“显示结果然后继续输入下组“group;for(int i=0;inCount; /输入个数pArra
6、y=new intnCount ; for(int n=0;npArrayn;SetArray(pArray,nCount); /调用设置函数 改变奇数偶数位置for(n=0;nusing namespace std ;typedef struct Node /链表节点int data ;struct Node*next ;*Head,*LinkNode;Head head;/头结点int length=0 ;Head CreatLinkList() ; /自定义带头链表创建函数 void Reserve(Head head) ; /反序算法的实现 其实是实现数据的反序 void Show(H
7、ead head) ;/显示函数 void main() int group ;coutgroup ;Head *pLink=new Headgroup; /保存链表头cout回车“next ;tem=p1-data ;p1-data=p2-data ;p2-data=tem ;p1=p1-next ;p2=head ;void Show(Head head) /显示函数 while(head!=NULL)coutdatanext;coutp1-data ;if(p1-data=66666)delete p1 ; p1=NULL ; p2=NULL;length-;return NULL ;w
8、hile(p1-data!=66666) p2=p1 ;p1=new Node ;length+;cinp1-data ;if(p1-data=66666)delete p1 ; p1=NULL ; p2-next=NULL;length-;return head ;p2-next=p1 ;return head ;5、/*单链表以非递减有序排列,设计算法实现在单链表中删去值相同的多余结点, 算法实现 就是用 2 个循环遍历链表 算法实现在下注释部分*/#include using namespace std ;typedef struct Node /链表节点int data ;struct Node*next ;*Head,*LinkNode;Head head ;/头结点 Head CreatLinkList() ;/自定义带头链表创建函数 void Delete(Head head) ; /删除重复的节点算法实现部分。void Show(Head head) ;/显示函数 void main() head=CreatLinkList() ;system(“cls“);coutp1-data ;if(p1-data=66666)