求一C++数据结构算法:已知线性表中的元素以值递增有序排列,并以单链表作为储存结构。试写一高效算法,删

如题所述

#include <iostream>

#include <ctime>

//定义链表节点结构

struct Node

{

public:

Node():_val(0),_next(NULL)

{

}

Node(int val):_val(val),_next(NULL)

{

}

Node(int val,Node* next):_val(val),_next(next)

{

}

~Node()

{

if (_next)

delete _next;

}

public:

int _val;

Node* _next;

};

typedef Node* LinkNode;

//创建一个链表

Node* CreateLink(int len,int MAX_BOUND = 100)

{

srand((unsigned int)time(NULL));

LinkNode head = new Node(-1);

LinkNode tmp = head;

for (int i = 0; i < len; ++i)

{

tmp = tmp->_next = new Node(rand() % MAX_BOUND);

}

tmp->_next = NULL;

return head;

}

//链表逆转

Node* LinkListReserve(LinkNode head)

{

LinkNode p = NULL; //记录逆转节点的前一个节点;

LinkNode r = head; //记录当前节点;

LinkNode q = NULL; //记录逆转节点的下一个节点;

while (r != NULL)

{

q = r->_next; //保存下一个节点

r->_next = p; //逆转

p = r; //下一次遍历

r = q;

}

return p;

}

//打印链表数据

void Print(LinkNode head)

{

using namespace std;

cout<<".......begin......"<<endl;

while (head != NULL)

{

cout<<head->_val<<" ";

head = head->_next;

}

cout<<endl<<".......end........"<<endl;

}

int main(int argc,char* argv[])

{

Node* head = CreateLink(4);

Print(head);

Print(LinkListReserve(head));

return 0;

}
温馨提示:内容为网友见解,仅供参考
第1个回答  2011-06-11
已知带头结点的动态单链表L中的结点是按整数值递增排列的,试写一算法将值假设有两个按元素值递增有序排列的线性表A和B,均以单链表①作存储结构,

已知线性表的元素(整数)以值递增有序排列,并以单链表作存储结构。试编写...
LinkNode p = NULL; \/\/记录逆转节点的前一个节点;LinkNode r = head; \/\/记录当前节点;LinkNode q = NULL; \/\/记录逆转节点的下一个节点;while (r != NULL){ q = r->_next; \/\/保存下一个节点 r->_next = p; \/\/逆转 p = r; \/\/下一次遍历 r = q;} return p;} \/\/打印链...

...以值递增有序排列,并以单链表作存储结构。试编写一个高效算法,删除...
{\/\/清空单链表,并释放节点所占空间 p=L->next;while(p!=NULL){ q=p->next;free(p);p=q;} L->next=NULL;return L;}

初学者求解一道数据结构[c语言版]的题目
\/ 题目:已知线性表中的元素以值递增有序排列,并以单链表做存储结构。试写一高效的算法,删除表中所有值大于 mink 且小于 maxk 的元素(若表中存在这样的元素),同时释放 被删除节点空间,并分析你的算法的时间复杂度(注意:mink 和 maxk 是给定的两个 参变量,它们的值可以和表中的元素相同,...

代码在一个递增有序的线性表中,有数值相同的元素存在.若存储方式为单链...
用两个指针p,pre,其中pre指向p的直接前驱结点。比较p->data和pre->data是否相等,如果相等将p继续只想下一个结点(即:p=p->next),直到不相等为止。此时就要更新pre和p的值,删除pre和p之间的结点(即:pre->next=p;),接着让p指向pre的下一个结点(即:p=pre->next;),细节上还要注意,...

假设有两个按元素值递增次序排列的线性表,均以单链表形式存储。请编写算...
重新输入按递增排序的单链表 :\\n";cin>>p1->num;} n++;} p2->next=NULL;return head;} void Print(Node *head) \/\/ 输出链表 { Node* p=head;while (p){ cout<num<<" "; p=p->next;} cout<<endl;} Node *ReverseList(Node *head) \/\/ 单链表的逆转 { Node *p,*q,*r;p=...

...题:用单链表作存储结构,编写一个实现线性表中元素逆置的算法_百度知 ...
typedef struct node { int data;struct node *next;}sqlist;void disp1(sqlist *lq){ sqlist *t=lq;while(t!=NULL){printf("%d ",t->data); t=t->next; } } void disp2(sqlist *lq){ sqlist *t=lq;while(t->next!=NULL){printf("%d ",t->data); t=t->next; } } v...

数据结构作业
2.8 假设有两个按元素值递增有序排列的线性表A和B,均以单链表①作存储结构,试编写算法将A表和B表归并成一个按元素值递减有序(即非递增有序,允许值相同)排列的线性表C,并要求利用原表(即A表和B表)的结点空间存放表C。①今后若不特别指明,链表均是指动态链表,且可以带头结点。 typedef int datatype; ...

设顺序表va中的数据元素递增有序。试写一算法,将x插入到顺序表的适当...
我有更好的答案推荐于2017-12-16 12:57:14 最佳答案 设顺序表va中的数据元素递增有序。试写一算法,将x插入到顺序表的适当位置上,以保持该表的有序性。void inList(SqlList L,int x){if(L.length>=L.listsize) newbase=(ElemType *)realloc(L.elem, (L.listsize+LISTINCREMENT)*sizeof(ElemType))...

数据结构作业~急求~~~用c语言或c++ 使用单链表实现系统进程列表,完成...
一、单链表的建立 有了动态内存分配的基础,要实现链表就不难了。所谓链表,就是用一组任意的存储单元存储线性表元素的一种数据结构。链表又分为单链表、双向链表和循环链表等。我们先讲讲单链表。所谓单链表,是指数据接点是单向排列的。一个单链表结点,其结构类型分为两部分:1、数据域:用来存储...

用C++写出按正位序建立一个单链表的算法
int GetElem(LinkList *L,int i,ElemType &e)\/\/求线性表中某个数据元素的值 { LinkList *p=L;int j=0;while(p!=NULL && jnext;} if(p==NULL)return 0;else { e=p->data;return 1;} } int LocateElem(LinkList *L,ElemType e)\/\/按元素值查找 { LinkList *p=L->next;int i=...

相似回答