数据结构c语言描述
① c语言描述数据结构小问题
是的。i<n执行了n+1次,而循环体执行了n次。
最后一次比较的时候其实i的值为n,只不过i没有小于n,所以就退出循环了。
② 数据结构(C语言版)的内容简介
《数据结构》(C语言版)是为“数据结构”课程编写的教材,也可作为学习数据结构及其算法的C程序设计的参数教材。
本书的前半部分从抽象数据类型的角度讨论各种基本类型的数据结构及其应用;后半部分主要讨论查找和排序的各种实现方法及其综合分析比较。其内容和章节编排1992年4月出版的《数据结构》(第二版)基本一致,但在本书中更突出了抽象数据类型的概念。全书采用类C语言作为数据结构和算法的描述语言。
本书概念表述严谨,逻辑推理严密,语言精炼,用词达意,并有配套出版的《数据结构题集》(C语言版),便于教学,又便于自学。
本书后附有光盘。光盘内容可在DOS环境下运行的以类C语言描述的“数据结构算法动态模拟辅助教学软件,以及在Windows环境下运行的以类PASCAL或类C两种语言描述的“数据结构算法动态模拟辅助教学软件”。
本书可作为计算机类专业或信息类相关专业的本科或专科教材,也可供从事计算机工程与应用工作的科技工作者参考。
③ 数据结构程序(c语言描述)!!!急急急!!!!
线性表,即顺序表
#include<stdio.h>
#include<stdlib.h>
#define LIST_INIT_SIZE 100 //线性表存储空间初始分配量
#define LISTINCREMENT 10 //线性表存储空间分配增量
typedef struct
{
int *elem; //存储空间基址
int length; //当前长度
int listsize; //当前分配存储容量
}SqList;
void InitList(SqList *L) //初始化
{
L->elem = (int *)malloc(LIST_INIT_SIZE * sizeof(int));
if(!L->elem) exit(1);
L->length = 0;
L->listsize = LIST_INIT_SIZE;
}
int GetElem(SqList *L,int i) //取得i位置的元素
{
if(i<1 || i>L->length) exit(1);
return (L->elem[i-1]);
}
void ListInsert(SqList *L,int i,int e) //插入
{
//顺序线性表L中第i个位置之前插入新元素e
int *newbase,*q,*p;
if(i<1 || i>L->length+1) exit(1);
if(L->length>=L->listsize) //存储空间满,增加分配
{
newbase = (int *)realloc(L->elem,(L->listsize+LISTINCREMENT)*sizeof(int));
if(!newbase) exit(1); //分配失败
L->elem = newbase; //指向新地址
L->listsize += LISTINCREMENT;
}
q = &(L->elem[i-1]); //插入位置
for(p=&(L->elem[L->length-1]);p>=q;--p)
*(p+1) = *p;
*q = e; //插入
++L->length;
}
void ListDelete(SqList *L,int i) //删除
{
int *q,*p;
if((i<1) || (i>L->length)) exit(1);
p = &(L->elem[i-1]);
q = L->elem + L->length -1; //表尾元素位置
for(++p;p<=q;++p) //向左移动
*(p-1) = *p;
--L->length;
}
void MergeList(SqList La,SqList Lb,SqList *Lc) //合并两表
{
int *pa,*pb,*pc,*pa_last,*pb_last;
pa = La.elem;
pb = Lb.elem;
Lc->listsize = Lc->length = La.length + Lb.length;
pc = Lc->elem = (int*)malloc(Lc->listsize*sizeof(int));
if(!Lc->elem) exit(1); //分配失败
pa_last = La.elem + La.length-1;
pb_last = Lb.elem + Lb.length-1; //取得最后一个元素的位置
while(pa<=pa_last && pb<=pb_last) //归并
{
if(*pa<=*pb) *pc++ = *pa++;
else *pc++ = *pb++;
}
while(pa<=pa_last) *pc++ = *pa++; //插入剩余元素
while(pb<=pb_last) *pc++ = *pb++;
}
void display(SqList *L) //显示
{
int i;
printf("the list is :");
for(i=0;i<L->length;i++)
{
printf("%d\n",L->elem[i]);
}
}
void main()
{
SqList sl,sl2,sl3;
InitList(&sl);
InitList(&sl2);//初始化两表
printf("%d\n",sl.length);
ListInsert(&sl,1,1);
ListInsert(&sl,2,2);//插入表1
ListInsert(&sl2,1,3);
ListInsert(&sl2,2,4);
display(&sl);
display(&sl2);
printf("merge a and b:\n");
MergeList(sl,sl2,&sl3);
display(&sl3);
}
④ 数据结构c语言描述(第2版)耿国华
你好
楼主。
很幸运的看到你的问题。
但是又很遗憾到现在还没有人回答你的问题。也可能你现在已经在别的地方找到了答案,那就得恭喜你啦。
对于你的问题我爱莫能助!
可能是你问的问题有些专业了。或者别人没有遇到或者接触过你的问题,所以帮不了你。建议你去问题的相关论坛去求助,那里的人通常比较多,也比较热心,可能能快点帮你解决问题。
希望我的回答也能够帮到你!
祝你好运。
快过年了,
最后祝您全家幸福健康快乐每一天!
⑤ 数据结构(C语言描述)问题
visit是访问根结点抽象操作的一个简化,类型是函数指针,需要用函数名去调用,并且,参数类型、数量、次序要一致
⑥ 数据结构习题~c语言描述
1“ab中内容按增序排列” 体现在输入上,比如A:12345 就不要给自己找麻烦写成54321,不然还得排序;⑴.因为是增序,所以用指针遍历A、B链表,每次获取较小值加入C,注意重复筛选,可以在插入时多判断一下,也可以在最后遍历一次C表。⑵.以A表为主,每移动一次A表指针都要遍历一次B表至其表尾或(A->data < B->data)即此时B的值已经大于A。最后就是主函数中提供输入A、B表的提示语,还有3次printf。
下面提供一个我写过的类似代码,忘记是什么题目了,好像就是(1)。
#include <stdio.h>
#include <malloc.h>
/*链表节点定义*/
typedef struct node
{
int data;
struct node *next;
}node;
node *head1,*head2,*Head;
/*链表节点创建*/
void initiatesl(node **h)
{
*h = (node*)malloc(sizeof(node));
(*h)->next = NULL;
}
/*根据给定表长生成基础表1、2*/
void create_list(node *h,int i)
{
int n = 0;
node *p,*q = h;
for(;n < i;n++)
{
initiatesl(&p);
q->next = p;
scanf("%d",&q->next->data);
q = q->next;
}
}
/*链表合成*/
void merge(node *H,node *h1,node *h2)
{
node *p = h1->next,*q = h2->next,*r = H,*s = H;
for(;p != NULL && q != NULL;r = r->next)
{
initiatesl(&r->next);
if(p->data < q->data)
{
r->next->data = p->data;
p = p->next;
}
else if(p->data > q->data)
{
r->next->data = q->data;
q = q->next;
}
else
{
r->next->data = p->data;
p = p->next;
q = q->next;
}
}
if(p == NULL)
for(;q != NULL;q = q->next,r = r->next)
{
initiatesl(&r->next);
r->next->data = q->data;
}
else
for(;p != NULL;p = p->next,r = r->next)
{
initiatesl(&r->next);
r->data = p->data;
}
}
/*主函数及交互界面*/
int main(void)
{
int a,b;
node *s,*S = head1;
initiatesl(&head1);/*创建三个头结点*/
initiatesl(&head2);
initiatesl(&Head);
printf("Please input the length of the two list.(a,b)\n");/*给定长度输入样式*/
scanf("%d,%d",&a,&b);
printf("Input list one:");/*创建链表1、2*/
create_list(head1,a);
printf("Input list two:");
create_list(head2,b);
merge(Head,head1,head2);
s = Head->next;
printf("L :");
for(;s != NULL;s = s->next)
printf("%d ",s->data);
printf("\n");
return 0;
}
⑦ 关于数据结构的问题,用C语言描述
下面是完整的程序,输出到一个文件中的,f(x,y)和g(x,y)放在一起对比
感觉满意请采纳
#include<stdio.h>
#include<math.h>
#define PI 3.1415926
double f[360][90];
unsigned char g[360][90];
main()
{
int x,y;
FILE *p;
double t,maxf=0,minf=1e10,d;
for(y=0;y<360;y++)
for(x=0;x<90;x++)
{
t=cos(PI*y/180);
t=(1-0.5*exp(-0.4*cos(PI*x/180)))*
(1-0.1*t*t);
f[y][x]=t;
if(t>maxf)
maxf=t;
if(t<minf)
minf=t;
}
d=255/(maxf-minf);
for(y=0;y<360;y++)
for(x=0;x<90;x++)
g[y][x]=(unsigned char)((f[y][x]-minf)*d);
if((p=fopen("out.txt","w"))==NULL)
{
puts("open file error");
getchar();
return;
}
for(y=0;y<360;y++)
for(x=0;x<90;x++)
fprintf(p,"%lf\t%u\n",f[y][x],g[y][x]);
fclose(p);
}
⑧ 数据结构(C语言描述)
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
#defineDataTypeint
#defineMAXSIZE1000
typedefstructnode{
DataTypedata;
structnode*lchild;
structnode*rchild;
}BiTreeNode;
DataTypeBT[MAXSIZE];
BiTreeNode*BuildBTree(DataTypeBT[],intn,inti)
{
BiTreeNode*node;
if(i>=n||(node=(BiTreeNode*)malloc(sizeof(BiTreeNode)))==NULL)returnNULL;
node->data=BT[i];
node->lchild=BuildBTree(BT,n,2*i+1);
node->rchild=BuildBTree(BT,n,2*i+2);
returnnode;
}
voidPrintLevel(BiTreeNode*bt,intlevel,intl)
{
if(!bt)return;
if(l<level)
PrintLevel(bt->lchild,level,l+1);
if(l==level)
printf("%4d",bt->data);
if(l<level)
PrintLevel(bt->rchild,level,l+1);
}
/*先序凹入表示法输出,一般通过前导的空格来凹入#*/
/*pre,sur分别为前导后续字符,一般前导为空格字符,#*/
voidPrintTree(BiTreeNode*bt,charpre,charsur,intdepth,intlevel){
if(bt==NULL)return;/*如果为空树,return;*/
inti=0;/*先序输出根*/
while(++i<level)printf("%c%c%c%c",pre,pre,pre,pre);//凹入,输出前导字符
printf("%4d",bt->data);//输出当前节点
while(i++<depth)printf("%c%c%c%c",sur,sur,sur,sur);//输出后续字符
printf(" ");
/*输出子树*/
PrintTree(bt->lchild,pre,sur,depth,level+1);
PrintTree(bt->rchild,pre,sur,depth,level+1);
}
voidCTBT(intn)
{//建立初始n个节点的完全二叉树
while(n--)BT[n]=n;
}
intmain()
{
inti,n,depth;
BiTreeNode*bt;
scanf("%d",&n);
CTBT(n);
bt=BuildBTree(BT,n,0);
depth=(int)(log(n)/log(2))+1;
i=0;
while(++i<=depth)
{
printf(" The%dthLevel:",i);
PrintLevel(bt,i,1);
}
printf(" ");
PrintTree(bt,'','-',depth,1);
return0;
}
经调试这个没问题,完成了要求的三个功能
⑨ 数据结构 用C语言描述
#include <malloc.h>
#define maxsize 100
typedef int Datatype;
typedef struct
{
Datatype data[maxsize];
int n;
}seqlist;
seqlist* createNullList_seq(void)
{
seqlist *l;
l=(seqlist*)malloc(sizeof(seqlist));
if(l!=NULL)
l->n=0;
else
printf("Out of space!!\n");
return l;
}
int insert_seq(seqlist* l,int p, Datatype x)
{
int q;
if(l->n==maxsize)
{ printf("overflow!\n");
return(0);
}
if(p<1||p>l->n+1)
{printf("no exist!\n");
return(0);
}
for(q=l->n-1;q>=p-1;q--)
l->data[q+1]=l->data[q];
l->data[q+1]=x;
l->n=l->n+1;
return(1);
}
int delete_seq(seqlist* l,int p)
{
int q;
if(p<1||p>l->n)
{printf("no exist!\n");
return(0);
}
for(q=p;q<=l->n-1;q++)
l->data[q-1]=l->data[q];
l->n=l->n-1;
return(1);
}
int locate_seq(seqlist* l,int x)
{
int q;
for(q=0;q<=l->n;q++)
{
if(l->data[q]==x)
return(q+1);
}
}
void display(seqlist* l)
{
for(int k=0;k<l->n;k++)
printf("%d ,",l->data[k]);
}
int length(seqlist* l)
{
return l->n;
}
void main()
{
int i,num,d,len,loc,j;
seqlist *l;
l=createNullList_seq();
num = 7;
for(i=0,j=1;i<num;i++,j++)
{
scanf("%d",&d);
insert_seq(l,j,d);
}
insert_seq(l,3,105);
display(l);
printf("\n");
delete_seq(l,6);
display(l);
printf("\n");
len=length(l);
printf("the length of seqlist is %d:",len);
printf("\n");
display(l);
printf("\n");
loc=locate_seq(l,60);
printf("the location of 60 is %d:",loc);
}
呵呵 我这学期也学数据结构 不过我们好象比你学的快哦
你这题目我帮你改好了 也运行过了 在VC++6.0里
结果是没有问题的 这个我保证
呵呵 其实你写的已经很完整了 只是很多地方丢三落四的
少个括号啊 符号啊 什么的 你都没注意
我逃课帮你改的哦 西西
⑩ 用c语言描述数据结构的问题
typedef int datatype:意思是用datatype这个字符串,实现int的功能,比如在做这行定义之后,定义一个整形变量a,就可以写成datatype a,效果和int a一样;
typedef struct node:跟上面一样,可以用“linklist”这个字符串声明一个结构体,结构体的形式,按照上面
struct node
{ datatype data;
struct node *next;
}的形式定义,大括号后面跟了一个linklist,是在后面用来定义结构体的。