1. 算法与数据结构问题(c语言)
1.首先要说明栈的存贮表示:
typedef struct
{
int *base;
int *top;//站顶指针
int stacksize;//当前已分配存贮空间;
int n;//栈中已存贮元素个数;
}SqStack;
假设S1,S2是已经开辟了存贮空间的两个栈,S1中存贮有元素,则StackSplit(S1,S2)可这样实现:
void StackSplit(&S1,&S2)
{
int e;
S2.top=S2.base;//将S2置空
for(int i=0;i<=(S1.n)/2;i++)
{
e=*--S1.top;//取S1栈顶元素
*S2.top++=e;//插入S2
}
}
2.同样要先定义存贮结构:
typedef struct Snode
{
int data;
Stack next;
}SNode,*Stack;//单位存储结构
typedef struct
{
Stack base;
Stack top;//栈顶指针
int n;//栈中已存储元素个数;
}SqStack;
StackSplit(S1,S2)可这样实现:
void StackSplit(S1,S2)
{
Stack e;
S2.top=S2.base;//将S2置空
for(int i=0;i<=(S1.n)/2;i++)
{
e=S1.top;//保存S1栈顶元素
S1.top=S1.top->next;//退栈
e.next=S2.top;
S2.top=e;//元素e入栈
}
}
3.
存储结构:
#define MAXQSIZE 100//最大队列长度
typedef struct
{
int *base;
int front;
int rear;
bool a;
}SqQueue;
基本操作:
void InitQueue(SqQueue &Q)//构造空队列
{
Q.base=(int *)malloc(MAXQSIZE *sizeof(int))
Q.front=Q.rear=0;
Q.a=0;//0为空;
}
bool EnQueue(SqQueue &Q,int e)//插入e
{
if((Q.rear+1)%MAXQSIZE==Q.front)
return 0;
Q.base[Q.rear]=e;
Q.rear=(Q.rear+1)%MAXQSIZE;
Q.a=1;//不为空
return 1;
}
boll DeQueue(SqQueue &Q,int &e)//出队
{
if(Q.front==Q.rear)
return 0;
e=Q.base[Q.front];
Q.front=(Q.front+1)%MAXSIZE;
if(Q.front==Q.rear)
Q.a=0;//为空
return 1;
}
有些可能我说的不清楚,细节问题可以再问我,我也是新手,共同进步,呵呵。
2. 数据结构(C语言版)课后题-关于串的算法
算法如下:
int strReplace(SString S,SString T, SString V)
{/*用串V替换S中的所有子串T */
int pos,i;
pos=strIndex(S,1,T); /*求S中子串T第一次出现的位置*/
if(pos = = 0) return(0);
while(pos!=0) /*用串V替换S中的所有子串T */
{
switch(T.len-V.len)
{
case 0: /*串T的长度等于串V的长度*/
for(i=0;i<=V.len;i++) /*用V替换T*/
S->ch[pos+i]=V.ch[i];
case >0: /*串T的长度大于串V的长度*/
for(i=pos+t.ien;i<S->len;i--) /*将S中子串T后的所有字符
S->ch[i-t.len+v.len]=S->ch[i]; 前移T.len-V.len个位置*/
for(i=0;i<=V.len;i++) /*用V替换T*/
S->ch[pos+i]=V.ch[i];
S->len=S->len-T.len+V.len;
case <0: /*串T的长度小于串V的长度*/
if(S->len-T.len+V.len)<= MAXLEN /*插入后串长小于MAXLEN*/
{ /*将S中子串T后的所有字符后移V.len-T.len个位置*/
for(i=S->len-T.len+V.len;i>=pos+T.len;i--)
S->ch[i]=S->ch[i-T.len+V.len];
for(i=0;i<=V.len;i++) /*用V替换T*/
S->ch[pos+i]=V.ch[i];
S->len=S->len-T.len+V.len; }
else
{ /*替换后串长>MAXLEN,但串V可以全部替换*/
if(pos+V.len<=MAXLEN)
{ for(i=MAXLEN-1;i>=pos+T.len; i--)
S->ch[i]=s->ch[i-T.len+V.len]
for(i=0;i<=V.len;i++) /*用V替换T*/
S->ch[pos+i]=V.ch[i];
S->len=MAXLEN;}
else /*串V的部分字符要舍弃*/
{ for(i=0;i<MAXLEN-pos;i++)
S->ch[i+pos]=V.ch[i];
S->len=MAXLEN;}
}/*switch()*/
pos=StrIndex(S,pos+V.len,T); /*求S中下一个子串T的位置*/
}/*while()*/
return(1);
}/*StrReplace()*/
3. 数据结构与算法的题目,用C语言解答
一个遍历找到x,好像是
if(p.data等于x),
printf p.data
else
p等于p.left,
p等于p.right
注前序遍历,此时p指向x
treeLeft等于new tree(p.left)
treeRight等于new tree(p.right)
注,以x的左,右子树为根,分别构造二叉树
class tree,class node 自己写吧,只会C sharp不好意思,爪机凑和看吧
4. 数据结构算法题(用C语言):实现函数int Delete(sqlist L,double x),函
//既然是顺序表,肯定有个length变量和数组data,你没有给具体的结构体,我就暂用这两///名称
intDelete(sqlistL,doublex)
{
intcount=0;
inti;
for(i=0;i<L.length;i++)
{
if(L.data[i]>x)
{
count++;
}
}
returncount;
}
5. 数据结构编程题(c语言)
因为你这个题目是到所输入符号跟栈顶元素不匹配时才结束的.
所以用顺序栈有可能发生上溢现象,因此在这里我用链式栈来解决这个问题
代码如下:
#include <stdio.h>
#include <stdlib.h>
#define len sizeof(stack)
typedef struct node
{
char c;
struct node* next;
}stack,*link;
link push(link s,char c); //进栈
link pop(link s); //出栈
int main ()
{
int flag=1; //初始化为1,表示输入的符号是匹配的
char c,top;
link s=NULL; //置空栈
while(1)
{
scanf("%c",&c);
switch(c)
{
case '[':
case '{':
case '(':
s=push(s,c);
break;
case ']':
case '}':
case ')':
top=s->c; //取得栈顶跟c比较
if((top=='['&&c==']')||(top=='{'&&c=='}')||(top=='('&&c==')')) //判断栈顶元素是否与c相同
s=pop(s);
else
flag=0; //不想同则改变标志flag的值
break;
}
if(!flag) //如果flag非真,则表示符号不匹配,显示相关信息并退出,否则继续输入
{
printf("符号不匹配!\n");
break;
}
}
return 0;
}
link push(link s,char c)
{
link p;
p=(link)malloc(len);
//进栈操作其实用的就是不带头结点的头插法建立一个单链表
p->c=c;
p->next=s;
s=p; //更新栈顶
return s; //返回新栈顶
}
link pop(link s)
{
link p;
p=s; //保存原栈顶
s=s->next; //更新栈顶
free(p); //删除原栈顶
return s;
}
6. 算法和数据结构的编程题,用C语言实现。跪求
编程题
5.1
#include <iostream>
#define PI 3.14159
using namespace std;
//重载函数
double getGirth(double length, double width)
{
return 2 * (length + width);
}
//重载函数
double getGirth(double radius)
{
return PI * radius * radius;
}
void main( )
{
cout<<getGirth(12, 10)<<endl;
cout<<getGirth(2)<<endl;
}
5.2
#include <iostream>
#include <string>
using namespace std;
class Person
{
protected:
string name;
int age;
public:
Person(){}
Person(string n, int a):name(n), age(a){};
~Person(){}
void display()
{
cout<<"姓名:"<<name<<endl;
cout<<"年龄:"<<age<<endl;
}
};
class Student : public Person
{
protected:
int sid;
public:
Student(int id, string n, int a)
{
name = n;
age =a;
sid = id;
}
~Student(){}
void display()
{
cout<<"姓名:"<<name<<endl;
cout<<"年龄:"<<age<<endl;
cout<<"学号:"<<sid<<endl;
}
};
class Teacher : public Person
{
protected:
string title;
public:
Teacher(string t, string n, int a)
{
name = n;
age =a;
title = t;
}
~Teacher(){}
void display()
{
cout<<"姓名:"<<name<<endl;
cout<<"年龄:"<<age<<endl;
cout<<"职称:"<<title<<endl;
}
};
void main( )
{
Person p = Person("张三其", 25);
p.display();
Student s = Student(1001, "李师煊", 19);
s.display();
Teacher t = Teacher("副教授", "王五", 39);
t.display();
}