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