數據結構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,是在後面用來定義結構體的。