A. c語言的數據結構是什麼
數據結構,data
strucure
是具有特定關系的數據元素的集合。它包含兩方面的信息:D+S
D
即數據元素的集合,也就是數據對象;S
數據元素間的關系,而這種關系指的是數據元素之間本身的關系
也叫做邏輯結構!而這種邏輯結構需要通過一種高級語言
比如c語言才能使得將這種邏輯結構在計算機中表現出來
也就是通過高級語言存儲結構。
B. C語言數據結構求解
1、head=malloc(sizeof(Node));//頭結點
這個返回的是 void *, 你要的是 linklist, 所以要強制類型轉換一下
head = (linklist)malloc(sizeof(Node));
2、求鏈表的長度函數,那個循環裡面 p 應該小寫呀。
C. C語言用數組存儲大型數據的演算法
/*
size_a,pa——指向數組a的有效末端
ma——a的最大容量,必須大於na
n=12——求n的階
p——求階乘時的當前乘數
*/
#include<stdio.h>
#define Ma 10000
int pa;/*指向數組a的有效末端*/
int p=2;
int memory_over=0;
union data
{ unsigned long int b;
struct
{unsigned l:16;
unsigned h:16;
}m;
}a[Ma];
/*+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
演算法說明1:考慮到result比較長,我用a[Ma].b來存儲n!的result,每一位a[pa].b能存儲4位10進制數字。
因為我定義的數組是靜態的,所以Ma應該足夠大。
ps:其實只用定義一個unsigned long int b[Ma];就可以了(直接用b[pa]代替a[pa].b),但是我考慮到可能會訪問每一結點b[pa]的高16位(a[pa].m.h)和低16位(a[pa].m.l),但是的我考慮是多餘的!!不用像我這樣定義這么復雜的共用體!!
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/
unsigned int cashe;
unsigned int carry;
void main()
{
unsigned int n;/*求n的階*/
void facto(unsigned int n);
printf("Input n:");
scanf("%u",&n);
/*=================開始求階乘!=============*/
a[0].b=1;/*初始化*/
facto(n);
/*+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
演算法說明2:上面這句直接調用facto(n)來求n!
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/
/*========================以下是顯示最後結果====================================*/
if(memory_over==0)
{printf("the result include %dNO:\n",pa+1);
printf("%u",a[pa--].m.l);
for(;pa>=0;pa--)
printf("%04u",a[pa].m.l);
printf("\n");
}
getch();
}
/*+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
演算法說明2:求階函數facto(n)說明:
這個函數會不斷地調用multiple(),它的作用是每被調用一次就使得a[pa].b與階數p相乘一次,直到乘完n為止!
{multiple();
p++;/*每一輪乘一個階數p*/
}
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/
void facto(unsigned int n)
{void multiple();
pa=0;
while(pa<Ma-1&&p<=n)/*容量限制*/
{multiple();
p++;/*每一輪乘一個階數p*/
}
if(p<=n)
{printf("memory out!\n");memory_over=1;}/*如果當前的存儲結果的數組a[Ma]不夠用!應提高Ma*/
}
/*==============================================================================
演算法說明3:乘法函數multiple()說明:負責a[pa].b與階數p相乘。
a[pa].b有很多結點,a[0].b、a[1].b、a[2].b、a[3].b、a[4].b、。。。
當然是從低結點a[0].b開始不斷與p相乘,產生的「進位」加到高位a[1].b,直到a[pa].b*p為止!
隨著結果數值增大,pa個結點的a[].b可能容納不下結果,所以如果a[pa].b與p相乘後還有「進位」carry,就擴大pa,並把carry放入到新增加的結點:
if(carry>0)
a[++pa].b=carry;
===================================================================================*/
void multiple()
{int i=0;
carry=0;
while(i<=pa)/*i指向當前處理的元素a[i],每一輪用一個位與階數p相乘*/
{a[i].b=a[i].b*p+carry;/*計算結果,要考慮來自低位的進位*/
carry=a[i].b/10000;/*計算進位*/
a[i].b=a[i].b%10000;/*計算余數*/
i++;
}
if(carry>0)
a[++pa].b=carry;
}
D. C語言中所謂的數據結構是什麼啊
1.<stdio.h>一般寫C語言程序都要加這個頭文件,因為它包含scanf()、printf()等控制輸入和輸出的函數:
<time.h>包含的主要是和時間相關的函數
<string.h>主要包含用來拷貝或比較字元串的函數
<stdlib.h>主要包含這幾個函數:malloc()、calloc()、realloc()、free()、system()、atoi()、atol()、rand()、srand()、exit()
這是比較常用到的頭文件。
2.typedef struct{
SElemtype *base;
SElemtype *top
int stacksize;
}SqStack;
以上為聲明一個結構體,並用SqStack作為這個結構體名,結構體為自定義的數據類型。
其中selemtype也是一個自定義的結構體名,具體代表什麼還要看具體的代碼。
E. 數據結構(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;
}
經調試這個沒問題,完成了要求的三個功能
F. 數據結構題怎麼寫,要c語言過程
1、演算法有啦一個大致的雛形後,想清楚演算法的流程,然後先將主程序打好,細節先用過程與函數代替。
2、然後再完善細節部分。
3、最後構造一些數據測試。
建議構造3種數據。
第一種隨機生成的大數據,以檢驗程序在平均情況下的時間效率。
第二種是人工構造的奇葩/猥瑣數據,且最好能確定答案,以檢驗其正確性,比如貪心的一些可能的反例。
最後一種是人工構造的特殊數據,比如,在有關樹的題目中,將輸入中的樹退化成一條鏈。
G. c語言數據結構
#include <iostream>
#define daxiao 100
using namespace std;
typedef struct bitnode//樹結點
{
char data;
struct bitnode * lchild,* rchild;
}bitnode,* bitree;
void inint(bitree &b//樹根地址,char s[]//輸入串)//初始化二叉樹
{
int top,j,k;
top=0;//表示樹的層數
j=0;//當前操作字元序號
k=1;//是操作1左、2右結點
char ch;
bitree q[100],p=NULL;//p保存新建結點地址
b=NULL;//保存下一次操作的結點地址
ch=s[j++];
while (ch!='\0')
{
switch (ch)
{
case '(': q[top++]=p;k=1;break;//輸入字元為'(',增加子樹,層數加一,下一個結點放左邊k=1
case ',': k=2;break;;//輸入字元為',',下一個結點放右邊k=2
case ')': top--;break;;//輸入字元為')',本子樹構造完成,回到本結點的父結點操作
default:p=(bitree)malloc(sizeof(bitnode));//輸入字元為是普通字元,建一新結點,p->data保存字元ch的值。
p->data=ch;p->lchild=p->rchild=NULL;
if (b==NULL)//樹根
b=p;//保存p為下一次操作的結點地址
else
{
switch(k)
{
case 1:q[top-1]->lchild=p;break;
case 2:q[top-1]->rchild=p;break;
}
}
}
ch=s[j++];//取下一個字元
}
}
void Inorder(bitree b)//中序遞歸遍歷列印二叉樹
{
if (b!=NULL)
{
Inorder(b->lchild);
cout<<b->data;
Inorder(b->rchild);
}
}
int main()
{
char s[1000];
bitree b;
cin>>s;
inint (b,s);
Inorder(b);
cout<<endl;
return 0;
}
H. C語言基礎,大數據的輸入和輸出
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#defineMAX101
intcheck(char*a){
inti,n,k=1;
n=strlen(a);
for(i=0;i<n;i++)
if(a[i]>'9'||a[i]<'0'){
k=0;
break;
}
returnk;
}
intplus(char*a,char*b,int*s){
inti,j,n,m,t,k=0;
//printf("%s %s ",a,b);
i=strlen(a)-1;
j=strlen(b)-1;
t=0;
while(i>=0&&j>=0){
t=t+a[i--]-'0'+b[j--]-'0';
s[k++]=t%10;
t=t/10;
}
if(t&&(i!=j))
s[k]=t;
if(t&&(i==j))
s[k++]=t;
while(i>=0){
s[k]+=a[i--]-'0';
k++;
}
while(j>=0){
s[k]+=b[j--]-'0';
k++;
}
for(i=k-1;i>=0;i--){
printf("%d",s[i]);
}
printf(" ");
returnk;
}
intmain(intargc,char*argv[]){
chara[MAX],b[MAX];
intc[MAX+2]={0};
scanf("%s%s",&a,&b);
//printf("%s %s ",a,b);
if(check(a)&&check(b))
plus(a,b,c);
else
printf("error ");
return0;
}
I. c語言常見的數據結構有哪些
1、線性數據結構
元素之間一般存在元素之間存在一對一關系,是最常用的一類數據結構,典型的有:數組、棧、隊列和線性表。
2、樹形結構
結點間具有層次關系,每一層的一個結點能且只能和上一層的一個結點相關,但同時可以和下一層的多個結點相關,稱為“一對多”關系,常見類型有:樹、堆。
3、圖形結構
在圖形結構中,允許多個結點之間相關,稱為“多對多”關系。
(1)線性數據結構:元素之間一般存在元素之間存在一對一關系,是最常用的一類數據結構,典型的有:數組、棧、隊列和線性表
(2)樹形結構:結點間具有層次關系,每一層的一個結點能且只能和上一層的一個結點相關,但同時可以和下一層的多個結點相關,稱為“一對多”關系,常見類型有:樹、堆
(3)圖形結構:在圖形結構中,允許多個結點之間相關,稱為“多對多”關系