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

c语言数据结构编程题怎么做

发布时间: 2023-07-24 17:44:19

A. c语言编程 数据结构题

#include<stdio.h>
#include<stdlib.h>
#include<conio.h>

#defineelemTypeint /*单链表元素数据类型*/
#defineLNODE_SIZEsizeof(structlNode) /*单链表结点空间大小*/

#definestatusint /*状态型变量*/
#defineOVERFLOW-1 /*内存溢出状态码*/
#defineERROR0 /*错误状态码*/
#defineOK1 /*正确状态码*/

/*单链表数据结构*/
typedefstructlNode{
elemTypedata;
structlNode*next;
}lNode,*linkList;

/*初始化*/
/*操作结果:构造一个空的单链表L*/
voidinitList(linkList*L){
*L=(linkList)malloc(LNODE_SIZE);/*产生头结点,并使L指向此头结点*/
if(!*L)/*内存分配失败*/
exit(OVERFLOW);
(*L)->next=NULL;/*指针域为空*/
}

/*销毁*/
/*初始条件:单链表L已存在。操作结果:销毁单链表L*/
voiddestroyList(linkListL){
linkListp,q;

p=L->next;/*p指向第一个结点*/
while(p){/*没到表尾*/
q=p->next;
free(p);
p=q;
}
free(L);
}

/*判断单链表是否为空*/
/*初始条件:单链表L已存在。操作结果:若L为空表,则返回TRUE,否则返回FALSE*/
intlistIsEmpty(linkListL){
returnL->next==NULL;
}

/*寻找指定特征(compare)元素的位序*/
/*初始条件:线性表L已存在,compare()是数据元素判定函数(满足为1,否则为0)*/
/*操作结果:返回L中第1个与e满足关系compare()的数据元素的位序*/
/*若这样的数据元素不存在,则返回值为0*/
intlocateElem(linkListL,elemTypee,status(*compare)(elemType,elemType)){
inti=0;
linkListp=L->next;
while(p){
i++;
if(compare(p->data,e))/*找到这样的数据元素*/
returni;
p=p->next;
}
return0;
}

/*数据元素判定*/
/*满足为1,否则为0*/
intcompare(elemTypedes,elemTypesrc){
returndes==src;
}

/*单链表指定位置插入新元素*/
/*操作结果:在带头结点的单链表L中第i个位置之前插入元素e*/
statuslistInsertNode(linkListL,inti,elemTypee){
intj=0;
linkListp=L,s;

while(p&&j<i-1){/*寻找第i-1个结点*/
p=p->next;
j++;
}

if(!p||j>i-1)/*插入位置不合理:i小于1或者大于表长*/
returnERROR;

/*生成新结点,并插入L中*/
s=(linkList)malloc(LNODE_SIZE);
if(!s)/*内存分配失败*/
exit(OVERFLOW);
s->data=e;
s->next=p->next;
p->next=s;

returnOK;
}

/*删除单链表指定位置元素*/
/*操作结果:在带头结点的单链线性表L中,删除第i个元素,并由e返回其值*/
statuslistDeleteNode(linkListL,inti,elemType*e){
intj=0;
linkListp=L,q;

while(p->next&&j<i-1){/*寻找第i个结点,并令p指向其前驱结点*/
p=p->next;
j++;
}

if(!p->next||j>i-1)/*删除位置不合理:i小于1或者大于表长*/
returnERROR;

/*删除并释放结点*/
q=p->next;
p->next=q->next;
*e=q->data;
free(q);

returnOK;
}

/*打印链表内容*/
/*初始条件:单链表L已存在。操作结果:当链表不为空时,打印链表内容并返回OK,否则返回ERROR*/
statusprintList(linkListL){
linkListp=L->next;/*p指向第一个结点*/

if(listIsEmpty(L)){
puts("Thelinklistisempty!");
returnERROR;
}

while(p){
printf("%d ",p->data);
p=p->next;
}
putchar(' ');
returnOK;
}

intmain(void){
linkListL;
elemTypee;
intindex;

/*初始化链表*/
initList(&L);
/*插入若干元素*/
listInsertNode(L,1,1);
listInsertNode(L,2,4);
listInsertNode(L,3,6);
listInsertNode(L,4,7);
listInsertNode(L,5,10);

printf("初始链表内容: ");
printList(L);
putchar(' ');

/*寻找数据为6的结点位置*/
index=locateElem(L,6,&compare);
printf("数据为6的结点位置: %d ",index);
putchar(' ');

/*在数据为6的结点之前插入数据为5的结点*/
listInsertNode(L,index,5);

printf("当前链表内容: ");
printList(L);

destroyList(L);

getch();/*屏幕暂留*/
return0;
}

B. 求助数据结构题用C语言做

1: 因为要删除那些即在B表又在C表中的元素,所以A,B,C三个表中都会有这个元素。那么用指针遍历A表,用另外两个指针遍历B,C。查找B,C中同A的元素,因为3个表都是有序的,可以采用些简单的比较。找到后删除。
2:void AE(stack &s)
{
int stack (s); //得到传递过来的栈
push(s,3); // 3进栈
push(s,4); // 4进栈
int x=pop(s)+2*pop(s); // x = 3 + 2 * 4
push(s,x); // x 进栈
int a[5]={2,5,8,22,15};
for(j=0;j<5;j++)
push(s,a[i]) // A数组进栈
while(!stackempty(s)) // 直到栈空
printf("%d",2*pop(s)); //输出 2*栈中每个元素

结果自己想了。

C. 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

D. 数据结构C语言程序设计编程题,请问这个程序怎么编

#include<stdio.h>
#include<stdlib.h>
typedef struct List
{
int data;
struct List *next;
}list;

int main()
{
list *L = (list*)calloc(1, sizeof(list)); //头结点
L->next = NULL;
int n, k, i;
scanf("%d%d", &n, &k);

list *s, *q = L;
for (i=0; i<n; ++i) //赋初值
{
s = (list*)calloc(1, sizeof(list));
s->data = i+1;
s->next = NULL;
q->next = s;
q = s;
}

q->next = L->next; //让尾结点指向头结点的下一个,即第一个人的位置,单向循环链表创建完成
q = L->next; //让q指向头结点的下一个

while (q->next != q) //只剩一个元素时,退出循环
{
for (i=1; i<k-1; ++i)
{q = q->next;} //q指向删除节点的前一个
s = q->next; //s指向删除节点
q->next = s->next; //将去除s后的链表重新连接起来
q = q->next; //让q指向下次循环的起始位置
//printf("%d ", s->data);
free(s);
s = NULL;
}

printf ("%d\n", q->data);
free(q);
q = NULL;
free(L);
L = NULL;
return 0;
}

E. 计算机二级C语言程序设计该怎么做

如下:

现在计算机二级考试程序设计题的环境是vs2010。vs2010是需要创建工程的,一个单独的文件是没有办法运行的,如果你使用的是考试软件,考试题里应该是有工程的,软件也应该能帮你自动打开vs2010工程,实在不行就自己创建。

当然,你也可以不使用vs2010,用cfree,devc++这种不需要创建工程的软件,单独一个文件是可以运行的。

如何备考

1.选择题:

如果C语言有一定基础,考前一周开始刷题没大问题(因为刷早了会忘)。我发的模拟考试软件里有,做完题有讲解。

另外背一背公共基础知识和一些程序设计基础,软件设计基础blabla,简单的一定要拿到!其次是数据结构和数据库设计基础,这些如果是零基础确实比较困难。

从题库中看败森锋,这些题其实也都是大同小异,做多了掌握套路其实还好,比如数据结构中二叉树,栈,队列等相关知识。其他搞不懂就千万别浪费时间,直接跳过,这些题占比很小,不会影响你过的嘻嘻。

然后就是C语言相关题目,这些题目比答主学校期末试卷广度小,深度浅,复杂度翻倍,甚至有为了出题而出题嫌疑,但是只要细心,还是没问题的。但是学过C的同学们,一定要刷刷题!不要以为学过C就好考,其实并不!主要熟悉套路,陷阱一般设在哪儿。

答主考试的时候,最痛苦的是选择最后几道C语言相关,真的蛮复杂,最后实在不想看,直接懵选项了。如果是零基础,可以不用看书,直接上手刷题!

2.程序填空题 、程序修改题:

这个一共36分,极其简单。尤其是修改题,一定要拿到!很多都是if写成IF这种“骚操作”。最好的方法就是用我发的模拟考试软件看改错题,也就103道左右吧,1分钟就能看一道,so easy!

填空题随缘,有难有简,还是大同小异,掌握套路最重要。方法还是直接刷题,填空题一般都是两个空都简单,或是一难一察晌简。有些题太复杂可以只看简单的那空,难的随缘,不差那分!

3.程序设计题:

这个题的给分规则是只看结果!所以不管是算数还是什么,如果不会编最后就直接把结果搞上去(printf一下)然后让程序运行下去不要卡住就好了。这道题非常的重要,做好了你就一定能过,甚至是能够高分通过。但是做不好也问题不大,只要你选择题能够对一半,还是有很大机会通过的。

4.全真模拟:

非常重要!考前一定要模拟考试软件模拟考试一次。记住,选择题提交之后就不能再修改了,慎重!

模拟完之后,看看有没有什么问题。

时间不够?那就合理分配各题型的时间。

建议:选春手择题40分钟,程序设计、修改、设计题合起来60分钟。一定要留下时间交卷,不要太匆忙。改错做错了?那就回去复习下改错。哪一个题型错了,就重点复习。

注意事项:

做题过程记得保存,建议做一个小题,保存一次!

每道小题有很多个步骤,中间不要跳步骤,一步一步地做!

注意文档命名格式,认真审题,根据要求来命名,尤其是不要出现错字!

注意文件保存位置,不要随意挪动文件位置,按题目要求来。

考试时一定要带的物品:

本人证件:准考证、身份证。

其他物品:笔、草稿纸、饮用水、纸巾、等等。

F. C语言编程题怎么做

#include <stdio.h>

int main()
{
void _m(char *p1, char *p2, int m);
char str1[100], *p1=str1, str2[100], *p2=str2;
int m;
printf("请随便输入一个字符串:");
gets(p1);
printf("您输入的字符串为:\n%s\n\n", p1);
printf("您打算从第几个字符开始复制呢?\n");
scanf("%d", &m);
_m(p1, p2, m);
printf("\n复制得到的另一个字符串为:\n%s", p2);
return 0;
}

void _m(char *p1, char *p2, int m)
{
int i;
char *temp=p1+m-1;
for(;*temp!='\0';){
*p2++ = *temp++;
}
}

G. C语言结构体编程题,求助大神

#include<stdio.h>

typedef struct __student_info
{
char num[10];
char name[10];
float score;
} student_info;

int main(void)
{
student_info info[5];
printf("请输入5名学生信息(学号 姓名 成绩): ");
for(int i = 0; i < 5; i++)
{
scanf("%s %s %f",info[i].num,info[i].name,&info[i].score);
}
float sum = 0;
for(int i = 0; i < 5; i++)
{
sum += info[i].score;
}
float average = sum/5;
printf("高于平均成绩的学生信息如下: ");
for(int i = 0; i < 5; i++)
{
if(info[i].score > average)
{
printf("%s %s %.1f ",info[i].num,info[i].name,info[i].score);
}
}
return 0;
}

H. c语言编程 数据结构题

栈先进后出,队列先进先出,队列的顺序等价于栈的出栈顺序。写了个简单的验证程序,初始的出栈顺序必须无误

#include<iostream>
usingstd::cout;

//iStack元素值有序,简化了编程,否则就要借助于下标的有序性
//'g'作为一个额外的标记,取到此值时,表示所有元素都已入栈
chariStack[]={'a','b','c','d','e','f','g'};
charoStack[]={'b','d','f','e','c','a'};

intno=1;

//sp用于指示iStack未入栈的元素
intsp=0;

charTop()
{
returniStack[sp];
}

//ch及之前元素入栈
voidPush(charch)
{
charcc=Top();
while(cc<=ch)
{
printf("(%2d)Push: %c ",no++,cc);
sp++;
cc=Top();
}
}

voidPop(charch)
{
if(ch>=Top()) //当前要出栈的元素未入栈
Push(ch);

printf("(%2d)Pop: %c ",no++,ch);
}

intmain()
{
intcount=0;
intlen=sizeof(oStack);

//1
printf("入栈顺序: ");
for(inti=0;i<len;i++)
printf("%c",iStack[i]);
printf(" ");

//2
printf("出栈顺序: ");
for(inti=0;i<len;i++)
printf("%c",oStack[i]);
printf(" ");

//3
printf("出入栈操作: ");
while(count<len)
{
Pop(oStack[count]);
count++;
}

return0;

}