请C语言版数据结构高手帮帮忙!
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了请C语言版数据结构高手帮帮忙!相关的知识,希望对你有一定的参考价值。
完成如下五题,其中顺序存储结构两题,链式存储结构两题,数据结构应用一题。
题目如下:
1) 编写一算法实现:设顺序表L中的数据元素递增有序,删除表中所有值大于k1且小于k2的元素(k1<= k2)。要求尽量减少移动元素的次数。
2) 编写一算法实现对于键盘输入的任意一个非负的十进制整数,打印输出与其等值的八进制数。
3) 求集合的交集:已知两个单链表A和B分别表示两个集合,其头指针分别为ha和hb,其元素类型为int且递增有序。设计一算法实现求A和B的交集C,要求C以递增单链表形式存储。
4) 假设以一维数组来存储循环队列的元素,同时设变量rear和qlen分别指示循环队列中队尾元素位置和队列元素个数。试给出此循环队列的判队空、判队满函数,并写出相应的入队和出队算法。
5) 设计一个算法,将带头结点的单链表中有重复值的结点删除(如有多个结点的值相同,保留第一个结点,将其余的结点删除)
解题格式如下:
(1)解题思路(文字描述)
(2)算法函数
(3)主程序测试(两三个测试用例验证算法正确性)
(4)测试结果样例(截图)
说明:题目量有点大,哪位高手帮我解答的话,除了现在悬赏的100分,每题加100分!我打算把自己的财富值全部付出!也就是说,要是五题都解答了,就再加500分!(一次性可能加不了这么多分,我会另提几个问题,然后直接采纳,保证把500分加满!!!请回答者留下邮箱,以便于我另提几个问题后,将问题的网址发给解答者!)
期限:最好在十天内给予解答!
我的邮箱:dyy@dyond.com。 每做完一题,就请发到我的邮箱,我就会提一个问题,给予100分奖励!直至500加满!等5题做完之后,这个问题的100分也赠给回答者!加上系统每题送20分,所以,回答者最少可以得到:720分!如果大家嫌少,我还可以再加分!我还有1000多分的经验值,可以再加!宗旨,我知道这个工作很难,真心希望大家帮帮忙!!非常感谢!!
#include<iostream.h>
struct list
int num;
struct list *next;
head=0,0;
void push(struct list *head,int num)
struct list *p=head;
while(p->next&&p->next->num<num)
p=p->next;
;
struct list *p1=new list;
p1->num=num;
p1->next=p->next;
p->next=p1;
void pop(struct list *head,int num1,int num2)//num1<num2
struct list *p=head,*q,*q1;
while(p->next&&p->next->num<=num1)
p=p->next;
//cout<<endl<<p->num;
;
q=p;
p=p->next;
while (p&&p->num<num2)
q1=p;
p=p->next;
delete q1;
q->next=p;
void print(struct list *head)
struct list *p=head->next;
while (p)
cout<<p->num<<ends;
p=p->next;
void main()
push(&head,1);
push(&head,4);
push(&head,6);
push(&head,2);
push(&head,3);
push(&head,7);
push(&head,-1);
print(&head);
cout<<endl;
pop(&head,1,6);
print(&head);
第二题:
#include<iostream.h>
void change(unsigned int num,char str[])
unsigned int temp;
int i=0;
char te[100];
do
//temp=num/8;
te[i++]=num%8+48;
num=num/8;
while(num);
for (int j=0;j<i;j++)
str[j]=te[i-j-1];
str[j]=0;
void main()
unsigned int num;
char str[100];
cin>>num;
change(num,str);
cout<<str;
第三题:
#include<iostream.h>
struct list
int num;
struct list *next;
head1=0,0,head2=0,0,head3=0,0;
void push(struct list *head,int num)
struct list *p=head;
while(p->next&&p->next->num<num)
p=p->next;
;
struct list *p1=new list;
p1->num=num;
p1->next=p->next;
p->next=p1;
void print(struct list *head)
struct list *p=head->next;
while (p)
cout<<p->num<<ends;
p=p->next;
void hebing(struct list *head1,struct list *head2,struct list *head3)
struct list *p1=head1->next,*p2=head2->next,*p3=head3,*p4;
while (p1||p2)
if (p1&&p2&&p1->num==p2->num)
p4=p1;
p1=p1->next;
p2=p2->next;
else if (p1&&!p2||((p1&&p2)&&p1->num<p2->num))
p4=p1;
p1=p1->next;
else
p4=p2;
p2=p2->next;
struct list *p=new struct list;
p->num=p4->num;
p->next=p3->next;
p3->next=p;
p3=p3->next;
void main()
push(&head1,1);
push(&head1,4);
push(&head1,6);
push(&head1,2);
push(&head1,3);
push(&head1,7);
push(&head1,-1);
push(&head2,3);
push(&head2,1);
push(&head2,9);
push(&head2,-2);
push(&head2,-3);
push(&head2,7);
push(&head2,-1);
print(&head1);
cout<<endl;
print(&head2);
cout<<endl;
hebing(&head1,&head2,&head3);
print(&head3);
//最近要考试,有空把后面几个写给你。
//妄我专门腾出那么多时间帮你写。竟不加分。 参考技术A 第二题: 把M改成8就行了 这也是我们的一道作业 是转换成任意进制的
#include<stdio.h>
#include<stdlib.h>
typedef int Status; //status 是函数的类型,其值是函数的结果状态代码
#define TURE 1
#define OK 1
#define ERROR 0
#define INFEASIBLE -1
#define OVERFLOW -2 //函数的结果状态代码的宏定义
#define STACK_INIT_SIZE 100 //存储空间初始分配量
#define INCREMENT 10 //存储空间分配增量
typedef struct
int * b; //在栈结构之前和销毁之后,b的值均为NULL
int * t; //栈顶指针
int stacksize; //当前分配的存储空间
SqStack;
//--------------------------基本操作的算法描述---------------------------------------
Status InitStack(SqStack &S)
//构造一个空栈S
S.b=(int*)malloc(STACK_INIT_SIZE * sizeof(int));
if(!S.b)exit(OVERFLOW); //存储分配失败
S.t=S.b;
S.stacksize=STACK_INIT_SIZE;
return OK;
//Initstack
//Status DestroyStack(SqStack &S) //销毁栈S
// while(S.b!=S.t)
// free(--S.t)
//
// return OK;
////Destroystack
Status Push(SqStack &S,SElemType e) //插入e为新的栈顶元素
if(S.t-S.b>=S.stacksize) //栈满追加存储空间
S.b=(SElemType*) realloc (S.b,(S.stacksize+INCREMENT)* sizeof(SElemTyoe));
if(!S.b)exit(OVERFLOW); //存储分配失败
S.t=S.b+S.stacksize;
S.Stacksize+=INCREMENT;
//if
*S.t++=e;
return OK;
//Push
Status StackEmpty(SqStack S) //若栈S为空,则返回TURE,否则返回FALSE。
if(S.b==S.t)return OK;
else return FALSE;
//StackEmpty
Status Pop(SqStack &S,SElemType &e) //若S不空,则删除S的栈顶元素,用e其值 并返回OK;否则返回FALSE
if(S.b==S.t)return ERROR;
e=*--S.t;
return OK;
//Pop
void conversion(SqStack &S,SElemType N,SElemTyoe M) //把 N 转换成M 进制,并存入S中;
while(N)
Push(S,N%M);
N=N/M;
//conversion
//------------------------------主函数部分--------------------------------------------
void main()
SqStack S;
int n,m,e;
char p;
InitStack(S);
do
printf("请输入一非负十进制整数和要转换的进制数(用空格隔开)");
scanf("%d %d",&n,&m);
conversion(S,n,m); //调用conversion 进行转换
printf("%d转换成%d进制为:\n",n,m);
while(!StackEmpty(S)) //输出结果
Pop(S,e);
if(e>=10)printf("%x",e);
else printf("%d",e);
//while
//StackEmpey(S); //销毁栈S
printf("如果想要继续请按下Y键,否则请按任意键:"); //做个循环——再次转换
scanf("%c",&p);
while(p=='Y'||p=='y');
参考技术B 这种题目好好看看课本就可以做出来的。还是自己学吧。
VMware ESX 虚拟机创建快照失败,请高手帮忙!!!
我现在用的是VMware ESX 4.0,创建了一虚拟机,有两个虚拟磁盘,分别用来安装操作系统和存放数据用。我将存放数据的磁盘模式设置为“独立”为了使将来恢复快照时,不会造成数据盘中的数据丢失。然后安装好操作系统之后,点“创建快照”按钮,提示“虚拟机配置了独立磁盘,因此无法执行内存快照”。希望高手前来支招。
参考技术A 我用的是EXSI,我先关掉虚拟机,然后去更改配置,取消独立磁盘,然后再启动,再做快照。 参考技术B 我的是rdm磁盘,没法做快照,把磁盘模式改成“从属”就可以了 参考技术C 因为你使用独立磁盘,所以无法使用快照。提示已经说的很清楚了。以上是关于请C语言版数据结构高手帮帮忙!的主要内容,如果未能解决你的问题,请参考以下文章