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

数据结构机试考c语言

发布时间: 2022-04-14 02:09:44

‘壹’ 考试中:数据结构c语言版求答案,快快!

void insert(NODE **phead ,int data)
{
NODE *p1=*phead,*p2=NULL,*p;

while(p1 !=NULL)
{
if(data<=p1->x)
{
p=(NODE *)malloc(sizeof(struct node));
p->x=data;
p->next=p1;
if( 1 p2==NULL ) /*若插入的节点将成为头节点*/
( 2 *phead )=p;//将头节点指针指向当前节点
else // 如果不是头节点,直接将p1前的一个节点也就是p2所在的节点和当前插入节点连接
p2->next=p;
break; // 跳出循环,插入已经完成,函数会马上返回。
}

// 可能要添加以下两行代码才会工作正常
p2 = p1;
p1 = p2->next;
}

if(p1==NULL) // 如果没有头节点直接添加
{
p=(NODE*),alloc(sizeof(struct node));
p->x=data;
p->next=( 3 NUll ); // 设置头节点的后向指针
if( 4 p2==NUll )/* 若插入的节点将成为头节点*/
( 5 *phead )=p;
else // 以下代码根本就是多余的
p2->next=p;
}
}

‘贰’ 数据结构 C语言

你这题目要求不明确。

我尽量把所有可能功能写进去。

1、输入分自动输入和手动输入两种模式,都是生成单链表。手动有输入验证

2、输入大写字母按顺序添加到链表,我写了2中排列(1、按ascii码排列。2、按字母顺序排列)

#include<stdio.h>
#include<malloc.h>
typedefstructabc
{
charc;
structabc*next;
}ABC;
voidMeError(ABC*lets);//内存申请异常
ABC*add2Lits(ABC*abcHead,ABC*abcTail,charc);//向链表添加字母
ABC*deleteByInx(ABC*abcHead,ABC*abcTail,intinx);//删除指定位置,返回尾节点,参数inx:第几个节点
ABC*insert2List(ABC*abcHead,ABC*abcTail,charc,intx);//向链表顺序位置插入大写字母(x=1按照ASCII码顺序插入,x=0按照字母顺序插入)
ABC*inputLet(ABC*abcHead,ABC*abcTail,intflag);//顺序输入26个小写字母
voidprintfList();//打印链表
intmaxlen=26;//链表总长度
intmain()
{
inti;
charc;
ABC*abcHead=NULL,*abcTail=NULL;
abcHead=(ABC*)malloc(sizeof(ABC));
MeError(abcHead);
abcHead->next=NULL;
printf("1、自动录入小写字母输入0,手动录入输入1:");
scanf("%d",&i);
abcTail=inputLet(abcHead,abcTail,i);
printfList(abcHead);

printf(" 2、请输入要删除第几个字母:");
scanf("%d",&i);
abcTail=deleteByInx(abcHead,abcTail,i);
printfList(abcHead);

printf(" 3、请输入要插入的大写字母:");
getchar();
scanf("%c",&c);
getchar();
printf("--按ASCII码顺序插入输入1,按照字母顺序插入输入0:");
scanf("%d",&i);
abcTail=insert2List(abcHead,abcTail,c,i);
printfList(abcHead);
return0;
}
voidprintfList(ABC*abcHead)//打印链表
{
printf("打印链表内容: ");
while(abcHead->next!=NULL)
{
printf("%c",abcHead->next->c);
abcHead=abcHead->next;
}
printf(" ");
}
ABC*inputLet(ABC*abcHead,ABC*abcTail,intflag)//顺序输入26个小写字母,参数flag>0:手动输入,flag=0自动输入
{
inti=maxlen;
charlc=0,c;
if(!flag)
{
printf("--按照顺序自动输入26个小写字母...... ");
c='a';
while(i--)
abcTail=add2Lits(abcHead,abcTail,c++);
returnabcTail;
}
printf("--按照顺序输入26个小写字母...... ");
getchar();
while(i--)
{
printf("输入第%d个字母:",26-i);
scanf("%c",&c);
getchar();
if((lc==0&&c!='a')||(lc!=0&&c-lc!=1))
{
printf("错误!请按照小写字母顺序重新");
i++;
continue;
}
else
{
lc=c;
abcTail=add2Lits(abcHead,abcTail,c);
}
}
returnabcTail;
}
voidMeError(ABC*lets)//内存申请异常
{
if(!lets)
{
printf("内存申请失败! ");
exit(0);
}
}
ABC*add2Lits(ABC*abcHead,ABC*abcTail,charc)//向链表添加字符,返回尾节点
{
ABC*abcNew=(ABC*)malloc(sizeof(ABC));
MeError(abcNew);
abcNew->c=c;
abcNew->next=NULL;
if(abcHead->next==NULL)
abcHead->next=abcNew;
else
abcTail->next=abcNew;
abcTail=abcNew;
returnabcTail;
}
ABC*deleteByInx(ABC*abcHead,ABC*abcTail,intinx)//删除指定位置,返回尾节点,参数inx:第几个节点
{
inti=0,flag=0;
ABC*abcNext=NULL;//要删除的节点的后一个节点
while(abcHead->next!=NULL)
{
i++;
abcNext=abcHead->next->next;
if(i==inx)
{
if(abcHead->next==abcTail)
abcTail=abcHead;
free(abcHead->next);
abcHead->next=abcNext;
flag=1;
maxlen--;
break;
}
abcHead=abcHead->next;
}
if(flag==0)
printf("未找到指定的字母 ");
returnabcTail;
}
ABC*insert2List(ABC*abcHead,ABC*abcTail,charc,intx)//向链表顺序位置插入大写字母(x=1按照ASCII码顺序插入,x=0按照字母顺序插入)
{
ABC*abcNext=NULL,*abcNew=NULL;
abcNew=(ABC*)malloc(sizeof(ABC));
abcNew->c=c;
abcNew->next=NULL;
while(abcHead->next!=NULL)
{
abcNext=abcHead->next->next;
if((x==1&&(abcNext==NULL||c<=abcHead->next->c))||(x==0&&(abcNext==NULL||c+32<=abcHead->next->c)))
{
abcNew->next=abcHead->next;
abcHead->next=abcNew;
break;
}
abcHead=abcHead->next;
}
returnabcTail;
}

‘叁’ 数据结构考研是考C语言的还是c++的

C语言,主要是 考思路,不是考察代码。

‘肆’ 大学的数据结构(c语言),实际上还是考c语言吗

基本的算法,考的最多的就是排序了,什么冒泡,插入,快速,二分等等。线性表主要考单向链表便利,建立,增删改,链表逆向等操作。二叉树么,就是个建立。递归遍历操作。图实际上考的不多,说白了还是算法问题,这些东西你得明白思想,知道怎么做,然后才是考你C语言基础语法,数组,结构体,指针功底。

‘伍’ 求c语言数据结构上机题代码(用数组来做)

#include <stdio.h>

#include"string.h"

#include <stdlib.h>

#define N 100000

#define M 10000

int fun(char a[])

{

int sum=0;

for(int i=0;i<strlen(a);i++)

sum+=a[i];//字符数字化→ACSII码之和是单词标志之一;

return sum;

}

int main() {

/*_________________________________________________*/

FILE *fp;

char b[N + 1];

//判断文件是否打开

if ( (fp = fopen("D:\英语论文.txt", "rt")) == NULL )/*这里D:\ 英语论文.txt 是路径;读取D盘下,名为(英语论文)的文本文件*/

{

puts("文件读取失败! ");

exit(0);

}

else

{

puts("文件读取成功");

puts("开始计算");

}

//循环读取文件的每一行数据

while( fgets(b, N, fp) != NULL )

{

/*__________________________________________*/

int d[M]={0},x=0;

char a[111][11]={''};

char t[11]={''};

int k=0,j=0;

for(int i=0;i<strlen(b);i++)

{

if((b[i]>='a'&&b[i]<='z')||(b[i]>='A'&&b[i]<='Z'))//不是空格就储存在二维数组中,一行一个单词;

a[k][j++]=b[i];

if(b[i]==' ')//遇到下一个空格就换行,进而开始下一个单词的储存;

{

k++;

j=0;

}

}

int max=fun(a[0]);

for(int i=0;i<=k;i++)

{

d[fun(a[i])]++;//用每个单词的ASCII码之和桶排序,这也即是字典序;

if(fun(a[i])>max)

max=fun(a[i]);//找出最大的作为上限;

}

int name;

for(int i=0;i<=max;i++)

{

name=0;

for(int j=0;j<=k;j++)

{

if(fun(a[j])==i)/*a[j]的ASCII码之和等于i,说明d[i]是记录单词a[j]的,d[i]的数就是a[j]出现的频率;*/

{

name=j;//记录单词下标;

}

}

if(d[i]!=0)//d[i]!=0即i是某个单词的ASCII码之和;

{

printf("%s %d ",a[name],d[i]);//输出

}

}

/*___________________________________________*/

}

//结束关闭文件

fclose(fp);

return 0;

}

这是修改过的,不过没太大变化,只是加了一个文件读取代码;

‘陆’ 数据结构考试的话代码到底写可以运行的C还是书上的那种类C语言呢

很明确,数据结构的考试,它会把大框架已经写好了,像main()和一些定义及常规的东西都写好了。

你只需要在它给你留的空里写上关键代码,然后还要你能够编译运行出结果。

你可以看一下历届真题

‘柒’ 数据结构的习题(C语言版)

第一个问题,分析下要求,可以知道要做的事情是合并两个数组到一个数组里去,数组C的长度是AB之和。表C的第一个字符不是A的第一个字符就是B的第一个字符。因此接下来要做的事情就是做一个长度为AB之和的循环,每一次找出A或B中的最小元素,存到C里面去,循环结束,C就自动有了。

第二个问题,有时间和空间的要求,不太容易,只有更好,没有最好。不过提供一个思路。可以首先扫描整个数列,将奇数偶数的位置和个数标注出来,存在一个数列中。例如数列奇 奇 偶 奇 奇,可以得到奇数个数为4,位置为[0,1,3,4],偶数为1,位置为[2],因此要生成的数列中前4个必定为奇数,而题目中没有对大小的要求,因此只用将偶数与最后面的奇数对换位置即可。对换的次数即为偶数的个数。

大概思路如此,不过有很多方法可以高效的存储和计算,具体实现,希望你能亲自琢磨下,还可以巩固一下C技巧。
祝好,有问题可以探讨。

‘捌’ C语言数据结构上机题

#include "stdafx.h"
#include<iostream>
using namespace std;
typedef struct LNode
{
char data;
struct LNode * next;
}LNode,* LinkList;
void CreateList(LinkList &L)//创建链表存放26个字母组成的线性表
{
L=(LinkList)malloc(sizeof(LNode));
L->next=NULL;
char c='z';
for(int i=26;i>0;i--)
{
LNode *p;
p=(LinkList)malloc(sizeof(LNode));
p->data=c--;
p->next=L->next;
L->next=p;
}
}
bool ListInsert(LinkList &L,int i,char c)//在第i个位置插入字母c
{
LNode * p=L;int j=0;
while(p&&j<i-1)
{
p=p->next;
++j;
}
if(!p||j>i-1)
return false;
LinkList s=(LinkList)malloc(sizeof(LNode));
s->data=c;
s->next=p->next;
p->next=s;
return true;
}
void main()
{
LinkList L;
CreateList(L);//1.创建链表存放26个字母组成的线性表
char c;int i;
cout<<"输入插入的字母"<<endl;
cin>>c;
cout<<"输入插入的位置(整数)"<<endl;
cin>>i;
if(ListInsert(L,i,c))//在第i个位置插入字母c
{
while(L->next!=NULL)//将插入后的线性表输出
{
cout<<L->next->data;
L=L->next;
}
}
}

//辛苦写完...刚调试通过...加分啊..
调试是在C++环境下调试的,如果你要在C环境下..把
cout<<L->next->data; 改为:
printf("%d",L->next->data);
cin>>c;改为:scanf("%c",c);
就ok了......

ps: o_o一般上机都是C++吧......

‘玖’ C语言数据结构考试

这几个题目都是数据结构里面的。
其实如果你懂顺序表,链表,后面的都比较简单的。都是在这个基础上。
(゚⊿゚)ツ复习下树,图,一些算法,链表,栈这种估计考得不多。主要是树,图,顺序表链表,一些算法。树考二叉树多一些。