当前位置:首页 » 编程语言 » c语言数据结构与算法操作题
扩展阅读
webinf下怎么引入js 2023-08-31 21:54:13
堡垒机怎么打开web 2023-08-31 21:54:11

c语言数据结构与算法操作题

发布时间: 2022-12-07 10:43:07

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();
}