‘壹’ 考试中:数据结构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]={'