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

数据结构C语言正确写法

发布时间: 2022-05-21 11:20:48

1. 数据结构(使用c语言

->叫做SmartPoint,是针对指针而使用的一种操作符,在L->size中,L是某一指针,L->size就是调用指针L指向的对象的size属性.
int
ListInsert(SeqList
*L,int
i,DataType
x)中第一个SeqList
*L指的是需要一个指向SeqList的指针,int是需要一个整数,DataType
x是指需要一个DataType类型的量,这个ListInsert方法的参数列表(也就是括号中的内容)指的是在列表L中的i位置插入一个类型为DataType的元素

2. 数据结构(用c语言写代码)

voidselectionSort(DataTypea[],intn){
inti,j,p;
DataTypetem;
for(i=1;i<n;i++){
p=0;
for(j=1;j<n-i;++j){
if(a[p]<=a[j]){
p=j;
}
}
tem=a[p];
a[p]=a[n-i];
a[n-i]=tem;
}
}

选择排序算法给你,其他的我懒得看了。。。。要睡觉。。。困。。。

3. 数据结构 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;
}

4. 数据结构(C语言版)算法的写法

数据结构的算法是种解题的思路,用什么编译器来检查你的思路是否正确不是很重要,看自己擅长什么语言就选什么语言的编译器,原理也基本上是一样的,你可以用c vc++ c# java等等,他们的思路其实一样,不一样的是每种编译器的语法规则不一样,学数据结构的话最好是用编译器来写程序编译后验证自己的思路和算法是否正确。下面我用的是排序的方法写的,用的c编译器。#include"stdio.h"
void main()
{int temp,a[3],i,j;<br>for(i=0;i<3;i++)<br>{printf("NO:%d\t",i+1);<br> scanf("%d",&a[i]);<br>}
for(i=0;i<3;i++)
for(j=i+1;j<3;j++)
{if(a[i]<a[j]){temp=a[i];a[i]=a[j];a[j]=temp;}
}
for(i=0;i<3;i++)
printf("%d ",a[i]);
getch();}

5. c语言数据结构

以上代码中,用数组创建链表Createlist函数存在较多的逻辑错误,你得再好好理清思路,参考代码如下:

linklist*Createlist(inta[],intn)
{
linklist*Head,*p,*q;
inti;
Head=(linklist*)malloc(sizeof(linklist));
Head->Next=NULL;
for(i=0;i<n;i++){
p=Head;//注意要保证初始条件
q=(linklist*)malloc(sizeof(linklist));
q->data=a[i];
while(p->Next!=NULL){
if(p->Next->data<q->data)
break;
else
p=p->Next;
}
q->Next=p->Next;//这两句的位置问题?
p->Next=q;
}
returnHead;
}

6. 数据结构c语言

  1. 把scanf("%d ",&q->name);改成scanf("%s",q->name);。

  2. 把scanf("%d ",&q->score);改成scanf("%d",&q->score);。

  3. 函数studlist *CreateStudent()应该有一个返回值。若不需要返回值,请改成voidCreateStudent()。

  4. if(p->Next->score<q->score)中p->Next->score并未赋值,怎么能与q->score比较?这里就会跳出运行。

  5. char name[3];中3太小只能放下一个汉字或两个字符。

  6. 适当的地方应该有释放所申请的内存的语句。

7. 关于C语言数据结构的问题

说几句我的理解:
1.&s是C++中的一种变量类型,叫做"引用"(reference),它的作用是给变量起一个别名.具体的用法你可以找一本C++的书来看看.在这里用引用变量是为了改变实参的值.(C中函数的值传递是单向的,只能由实参传给形参.)
2.在C中,数组a[i]是转化成*(a+i)来处理的,所以也可以用指针来定义数组,这个只是形式的不同罢了,熟悉C的人喜欢这样使用,因为少了一步转换,效率会高一些.
3.StackEmpty只是一个函数,估计前面定义的时候就写成EmptyStack了,这个应该不是什么要紧的问题吧.