数据结构例题1

 1.定义正读和反读都相同的字符序列为“回文”,例如,“abcdcba”是回文,“ashgash”不是回文。试写一个算法判断读入的一个以‘@’为结束符的字符序列是否为回文。

int IsReverse(){
	PseqStack S;
	PseqQueue Q;
	char e,x,y;
	S=Init_SeqStack();  //初始化栈 S
	Q=Init_SeqQueue();  //初始化队列 Q
	While((e=getchar())!='@'){   //遇到@停止输入 
		Push_SeqStack(S,e);  //e进栈 
		In_SeqQueue(Q,e);   //e进队列 
	} 
	while(!Empty_SeqStack(S)||!Empty_SeqQueue(Q)){
		Out_SeqStack(S,&x);    //栈顶元素出栈 
		Pop_SeqQueue(Q,&y);    //队头元素出队 
		if(x!=y)  
		   return 0;
	} 
    return 1;   //所有元素比较完毕,未出现不同,是回文 
}

2.V2. 已知线性表(a1,a2, a3 ,…,an)按顺序存于内存,每个元素都是整数,试设计用最少时间和空间代价,把所有值为负数的元素移到全部非负数值元素前边的算法:例:(x,-x,-x,x,x,-x …x)变为(-x,-x,-x…x,x,x)(其中:x>0)。假设线性表的存储结构为:
typedef  struct  node { 
DataType  data[MAXSIZE];
     int  length;
} SeqList, *PSeqList;

void divide(SeqList L){
	int low=0;
	int high=L->length-1;   
	while(low<high){
		while(low<high&&L->data[high]>0) high--;   //从后向前遍历,直到遇到负数停止 
		while(low<high&&L->data[low]<0) low++;    //从前往后遍历,指导遇到正数 
		if(low<high){                             //交换元素 
			int temp=L->data[low];
			L->data[low]=L->data[high]
			L->data[low]=temp
		}
	} 
}

3,已知一棵二叉树采用二叉链表存储,定义二叉树中结点x的根路径为从根结点到x结点的一条路径,请编写算法输出该二叉树中最长的一条根路径(如存在多条最长根路径,只输出一条即可)假设二叉树结点的存储结构为:
typedef char DataType;    //设结点内容的数据类型为字符型                  
typedef  struct  bnode {
DataType data;
        struct  bnode  *lchild, *rchild;
} Bnode, *BTree ;

int depths(BTree T,DataType a[],int &MaxLen,DataType b[],int &CurrentLen) {
	//MaxLen和CurrentLen初始值为0 
	if(T==null){      //当前路径为最长路径 
		if(MaxLen<CurrenLen){
			for(int i=0;i<CurrentLen;i++){     /!!!!!!!!!!!!注意不是 i<=CurrentLen
				a[i]=b[i];  //当前路径存入a数组 
			}
			MaxLen=CurrentLen;
		}
	}
	
	else{
		b[CurrentLen++]=T->data;   //记录当前结点的值 
		depth(T->lchild,a,&MaxLen,b,&CurrentLen);
		depth(T->rchild,a,&MaxLen,b,&CurrentLen);
		--CurrentLen;
	}
}

 

 

 

 

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值