⑴ 数据结构上机题c语言
#include<stdio.h>
voidMergeArr(inta[],intm,intb[],intn,intc[])
{
inti=0,j=0,k=0;
while(i<m&&j<n)
{
if(a[i]<b[j])
c[k++]=a[i++];
else
c[k++]=b[j++];
}
while(i<m)
c[k++]=a[i++];
while(j<n)
c[k++]=b[j++];
}
intmain()
{
inti;
//用数组表示顺序表
intA[4]={2,5,9,10};
intB[6]={1,3,4,7,8,12};
intC[10]={0};
MergeArr(A,4,B,6,C);
for(i=0;i<10;++i)
printf("%d",C[i]);
return0;
}
⑵ c语言编程 数据结构题
(⊙o⊙)…我昨天看到了,写完代码之后找不到问题了
。一会儿回去把代码贴上来。
给你参考参考:
/*
*Filename:main.c
*/
#include<stdio.h>
#include"queue.h"
intmain(void){
inti;
queueque;
/*
*创建一个大小为10的队列,对队列进行入队,出队操作
*/
que=create_queue(10);
for(i=0;i<10;i++){
in_queue(que,i);
}
for(i=0;i<5;i++){
printf("%d ",out_queue(que));
}
printf(" 队列是否为空?");
if(is_empty(que)){
printf("TRUE ");
}else{
printf("FALSE 将队列置空 ");
set_queue_empty(que);
}
if(is_empty(que)){
printf("队列为空 ");
}
free_queue(que);
return0;
}
/*
*Filename:queue.c
*/
#include"queue.h"
#include<stdlib.h>
/*
*创建大小为size的循环队列
*/
queuecreate_queue(size_tsize){
q_valuetemp=NULL;
queueque=NULL;
/*
*创建队列指针
*/
que=(queue)malloc(sizeof(struct_queue));
que->size=size;
/*
*创建队列值,初始化为-1
*/
que->rear=(q_value)malloc(sizeof(struct_que_value));
que->rear->value=-1;
temp=que->rear;
while(--size){
que->front=(q_value)malloc(sizeof(struct_que_value));
que->front->next=temp;
que->front->value=-1;
temp=que->front;
}
/*
*头尾相连成为循环队列
*/
que->rear->next=que->front;
que->rear=que->front;
returnque;
}
/*
*将队列设置为空
*/
voidset_queue_empty(queueque){
while(que->front!=que->rear){
que->rear->value=-1;
que->rear=que->rear->next;
}
que->front->value=-1;
que->front=que->rear;
}
/*
*判断队列是否为空
*/
_boolis_empty(queueque){
if(que->front==que->rear&&
que->front->value==-1)
returnTRUE;
returnFALSE;
}
/*
*判断队列是否为满了
*/
_boolis_full(queueque){
if(que->front==que->rear&&
que->front->value!=-1)
returnTRUE;
returnFALSE;
}
/*
*出队,出队之后的位置用-1标记
*/
intout_queue(queueque){
intvalue=que->rear->value;
/*
*如果队列为空则返回-1
*/
/*
if(is_empty(que)){
printf("队列为空 ");
return-1;
}
*/
que->rear->value=-1;
que->rear=que->rear->next;
returnvalue;
}
/*
*入队
*/
voidin_queue(queueque,intvalue){
/*
*如果队列满则不能入队
*/
/*
if(is_full(que)){
printf("队列已满 ");
return;
}
*/
que->front->value=value;
que->front=que->front->next;
}
/*
*释放队列
*/
voidfree_queue(queueque){
q_valuetemp=que->front->next;
while((que->size)--){
free(que->front);
que->front=temp;
temp=temp->next;
}
free(que);
}
/*
*Filename:queue.h
*/
#ifndef_QUEUE_H_
#define_QUEUE_H_
#include<stdio.h>
typedefint_bool;
#defineFALSE(0)
#defineTRUE(1)
typedefstruct_que_value*q_value;
typedefstruct_queue*queue;
struct_que_value{
intvalue;
q_valuenext;
};
struct_queue{
size_tsize;
q_valuefront;
q_valuerear;
};
queuecreate_queue(size_tsize);
voidfree_queue(queueque);
voidset_queue_empty(queueque);
_boolis_empty(queueque);
_boolis_full(queueque);
voidin_queue(queueque,intvalue);
intout_queue(queueque);
#endif
⑶ 数据结构与算法作业:用C语言编程随机生成一个迷宫,然后找出从入口到出口的路线图。急!
几点说明:
1.本程序是动态的,运行后自动寻找迷宫出路
2.本程序对C语言刚学完的有很大的意义.
3.四周是墙,坐标(1,1)是入口,右下脚是出口
声明:本程序用VC调试是无法通过的需要修改
本程序调试工具是TC.....................
#include "graphics.h"
#include "dos.h"
#include "stdlib.h"
#include "process.h"
#define MAX_COL 14/*定义迷宫大小*/
#define MAX_ROW 14
typedef struct
{ int vert;
int horiz;
}offsets;
mapture(int i,int j,int k);/*标记迷宫,(i,j)标记为k模式*/
initmaze();/*初始化迷宫数组*/
findmaze(int i,int j);/*找到了(i,j)可走,标记*/
mapmaze();/*画出原始迷宫*/
int findpath(int row,int col);/*递归函数,找出迷宫路径*/
mapbar();/*画出方格*/
initgrap();/*初始化VGA*/
print();/*迷宫走完后,输出是否成功 */
int startx=50,starty=50;/*画图的屏幕坐标*/
int maze[MAX_ROW][MAX_COL];
offsets move[8]={{0,1},{1,1},{-1,1},{1,0},{-1,0},{0,-1},{1,-1},{-1,-1}}; /*8个方向寻找*/
initmaze()/*初始化迷宫数组 */
{ int i,j;
for(i=0;i<MAX_ROW;i++)/*迷宫四周设置为1 代表墙*/
{ maze[i][0]=1;
maze[i][MAX_COL-1]=1;
}
for(i=0;i<MAX_COL;i++)
{ maze[0][i]=1;
maze[MAX_ROW-1][i]=1;
}
randomize();
for(i=1;i<MAX_ROW-1;i++)/*迷宫图形随机产生 1表示不通 0表示可行*/
for(j=1;j<MAX_COL-1;j++)
{
maze[i][j]=random(2);
}
}
findmaze(int i,int j)/*找到 (i,j)可走*/
{
mapture(j,i,2);/*在图形上标记*/
sleep(1);
}
returnmaze(int i,int j)/*找到(i,j)可走 ,但下一步无路走则标记*/
{
mapture(j,i,3);/*在图形上标记*/
sleep(1);
}
print(int i)/*迷宫走完后,输出是否成功*/
{ settextstyle(1,0,5);
if(i==1)
outtextxy(340,400,"Ture path!");
else if(i==2)
outtextxy(340,400,"No path!");
}
int findpath(int row,int col)/*用递归法找迷宫*/
{ int direct,next_row,next_col;
direct=0;
maze[1][1]=2;
mapture(1,1,2);
sleep(1);
while(direct<8)/*8个方向寻找*/
{ next_row=row+move[direct].vert;/*设置下一步坐标*/
next_col=col+move[direct].horiz;
if(maze[next_row][next_col]==0) /*可走,便标记*/
{ maze[next_row][next_col]=2;
findmaze(next_row,next_col) ;
if(next_row==(MAX_ROW-2)&&next_col==(MAX_COL-2))/*找到出口退出程序*/
{ print(1);
getch();
exit(0);
}
else
findpath(next_row,next_col);/*没有到出口继续递归*/
maze[next_row][next_col]=3;
returnmaze(next_row,next_col);
}
direct++;
}
return(row);
}
TC调试良好
⑷ 关于数据结构(C语言)的几个题
1.
voidconverse(intn,intd){
SqStackS;//新建一个栈
InitStack(S);//初始化栈
intk,e;
while(n>0){
k=n%d;
push(S,k);
n=n/d;
}//将余数进栈
while(S.top!=S.base){
pop(S,e);
printf("%1d",e);
}//输出结果
}
8.
先序遍历:ABCDEF
中序遍历:BCDAFE
后序遍历:DCBFEA
⑸ 数据结构(C语言版)课后习题,求大佬解答
#include<stdio.h>
void f(char *s,char *ss,int n) { int i,k,m; char *p,*q,*r;
k=0; r=ss; while ( *r ) { r++; k++; } //找到ss的末尾0,计算ss长度
m=0; q=s; while ( *q ) { q++; m++; } //找到s的末尾0
p=q; q+=k; *q=0; q--; //计算新字符串结尾位置
for ( i=0;i<m-n;i++,p--,q-- ) *q=*p; //将s最后k个字符后移k位
for ( i=0,r--;i<k;i++,q--,r-- ) *q=*r; //将ss倒序复制到s中空出来位置
}
void main() { char s[256],ss[256]; int n;
scanf("%s%s%d",s,ss,&n); f(s,ss,n); printf("%s ",s);
}