數據結構c語言
❶ 數據結構和c語言有什麼區別
數據結構是數據及數據之間的關系,C語言只是一門編程語言,可以用C語言來寫程序,實現數據按照某種特定的關系來組織和管理數據(也就是實現數據結構),所以數據結構的課程會有不同的語言版本,其實就是用不同的語言來實現數據結構了。呵呵,不知道你明白沒有呢~~
❷ 數據結構(C語言)
呵呵,碰巧到你網路空間看了下,看到了你想知道的這個問題,蒽蒽,下午就給你答案哈~~~
恩,可以了:
#include <stdio.h>
#include <stdlib.h>
typedef struct term
{
double coef;//系數
int expn; //指數
struct term *next;
}term,*polynomial;
//注:下面的head_p是頭指針,而非頭結點。其存放的是多項式的第一項
int depart_polyn(polynomial &head_p,polynomial &Odd_items,polynomial &Even_items)//奇數項,偶數項
{
int i=1,j=1;
polynomial odd,even,p;
Odd_items=Even_items=NULL;
p=head_p;
while(1)
{
if(p->expn%2)
{
if(i)
{
i=0;//使得奇數項頭指針只賦值一次
Odd_items=p;
odd=Odd_items;
}
else
{
odd->next=p;
odd=odd->next;
}
p=p->next;
odd->next=Odd_items;
}
else
{
if(j)
{
j=0;//作用同上
Even_items=p;
even=Even_items;
}
else
{
even->next=p;
even=even->next;
}
p=p->next;
even->next=Even_items;
}
if(p==head_p)
break;
}
return 1;
}
void print_polyn(polynomial head)//這函數只是針對main函數內給出的多項式例子編的,處理的系數均為正數。
{
polynomial p=head;
if( !head)
{
puts("該表為空:");
return;
}
while(1)
{
if(p->next!=head)
printf("%gm^%d + ",p->coef,p->expn);
else
printf("%gm^%d\n",p->coef,p->expn);
p=p->next;
if(p==head)
break;
}
putchar('\n');
}
int main()
{
int i;
polynomial head_p,head,Odd_items,Even_items,newbase;
head_p=(polynomial)malloc(sizeof(term));
head_p->coef=2.71;
head_p->expn=0;
head=head_p;
//隨意創建了一個稀疏多項式,以驗證
for(i=1;i<11;i++)
{
newbase=(polynomial)malloc(sizeof(term));
newbase->coef=2.71*i;
newbase->expn=i*13;
head->next=newbase;
head=head->next;
}
head->next=head_p;//構成循環鏈表
puts("原稀疏多項式:");
print_polyn(head_p);
if(depart_polyn(head_p,Odd_items,Even_items) )
{
puts("分解後的奇數項稀疏多項式:");
print_polyn(Odd_items);
puts("分解後的偶數項稀疏多項式:");
print_polyn(Even_items);
}
return 0;
}
哪裡不懂可追問:
❸ 數據結構c語言版
#include "stdio.h"
typedef char datatype;
typedef struct node{
datatype data;
struct node *next;
} stack;
stack * creat(void)
{
char ch;
stack * head;
stack *p;
head=NULL;/*初始化為空*/
ch=getchar( );
while (ch!='\n'){
p=(stack*)malloc(sizeof(stack));/*分配空間*/
p->data=ch;/*數據域賦值*/
p->next=head;/*指定後繼指針*/
head=p;/*head指針指定到新插入的結點上*/
ch=getchar( );
}
return (head);
}
void MakeNull(stack *s)/*使棧s為空*/
{
stack *p=s;
while(s!=NULL){
s=s->next;
free(p);/*釋放空間*/
p=s;
}
}
datatype Top(stack *s)
{
if(Empty(s))/*s為空棧,直接跳出,提示出錯信息*/
printf("The stack is empty.");
else
return s->data;
}
void Pop(stack *s)
{
stack *p;
if(Empty(s)) /*s為空棧,直接跳出,提示出錯信息*/
printf("The stack is empty.");
else{
p=s;
s=s->next;
free(p);/*釋放棧頂空間*/
}
}
void Push(stack *s,datatype x)
{
stack *p;
p=(stack*)malloc(sizeof(stack));
p->data=x;
p->next=s;
s=p;
}
int Empty(stack *s)
{
return(s==NULL);
}
void main()
{
stack* m_stack=creat();
char m_top;
if(!Empty(m_stack))
{
m_top=Top(m_stack);
Pop(m_stack);
}
else
Push(m_stack,'a');
MakeNull(m_stack);
}
❹ 數據結構C語言版
//二叉樹的先序遍歷序列:ABCEDFHGIJ
//二叉樹的中序遍歷序列:ECBHFDJIGA
//二叉樹的後序遍歷序列:ECHFJIGDBA
#include"stdio.h"
#include"stdlib.h"
structtree
{
chardata;
structtree*left;
structtree*right;
};
typedefstructtreetreenode;
typedeftreenode*btree;
btreecreatebtree(char*data,intpos,intmaxPos)//遞歸創建法
{
btreenewnode;
if(data[pos]==0||pos>maxPos)
{
returnNULL;
}
else
{
newnode=(btree)malloc(sizeof(treenode));
newnode->data=data[pos];
newnode->left=createbtree(data,2*pos,maxPos);
newnode->right=createbtree(data,2*pos+1,maxPos);
returnnewnode;
}
}
voidinorder(btreeptr)
{
if(ptr!=NULL)
{
inorder(ptr->left);
printf("%C",ptr->data);
inorder(ptr->right);
}
}
voidpreorder(btreeptr)
{
if(ptr!=NULL)
{
printf("%C",ptr->data);
preorder(ptr->left);
preorder(ptr->right);
}
}
voidpostorder(btreeptr)
{
if(ptr!=NULL)
{
postorder(ptr->left);
postorder(ptr->right);
printf("%C",ptr->data);
}
}
intmain()
{
btreeroot=NULL;
inti;
chardata[64]={0,'A','B',0,'C','D',0,0,
'E',0,'F','G',0,0,0,0,
0,0,0,0,'H',0,'I',0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,'J',0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
root=createbtree(data,1,63);
printf("二叉樹的順序存儲內容: ");
for(i=1;i<64;i++)
{
if(data[i]==0)
{
printf("^");
}
else
{
printf("%C",data[i]);
}
if(i%8==7)printf(" ");
}
printf(" 二叉樹的先序遍歷序列:");
preorder(root);
printf(" 二叉樹的中序遍歷序列:");
inorder(root);
printf(" 二叉樹的後序遍歷序列:");
postorder(root);
printf(" ");
return0;
}
❺ 數據結構C語言編程
#include"stdio.h"
#include<stdlib.h>
#include"time.h"
intmain(intargv,char*argc[]){
doublex[10]={0.0,};
inti;
srand((unsigned)time(NULL));
while(rand()%10000!=0){//
for(i=0;i<9;x[i++]=x[i+1]);
x[9]=rand()/32767.0*100000;//模擬採集數據
}
for(i=0;i<10;printf("%10.3f ",x[i++]));//輸出最後10個數
return0;
}
運行樣例:
❻ 數據結構(c語言)
1.數據結構是一門研究非數值計算的程序設計問題中計算機的 A 以及它們之間的 _ B 和運算等的學科。
① A. 數據元素 B. 計算方法 C. 邏輯存儲 D. 數據映象
② A. 結構 B. 關系 C. 運算 D. 演算法
2.數據結構被形式地定義為(K,R),其中K是 B 的有限集,R是K上的 A 有限集。
① A. 演算法 B. 數據元素 C. 數據操作 D. 邏輯結構
② A. 操作 B. 映象 C. 存儲 D. 關系
3.在數據結構中,從邏輯上可以把數據結構分成____C____。
A. 動態結構和靜態結構 B. 緊湊結構和非緊湊結構
C. 線性結構和非線性結構 D. 內部結構和外部結構
4.演算法分析的目的是 C ,演算法分析的兩個主要方面是 A 。
① A. 找出數據結構的合理性 B. 研究演算法中的輸入和輸出的關系
C. 分析演算法的效率以求改進 D. 分析演算法的易懂性和文檔性
② A. 空間復雜度和時間復雜度 B. 正確性和簡單性
C. 可讀性和文檔性 D. 數據復雜性和程序復雜性
5.計算機演算法指的是 C ,它必須具備輸入、輸出和 C 等5個特性。
① A. 計算方法 B. 排序方法
C. 解決問題的有限運算序列 D. 調度方法
② A. 可執行性、可移植性和可擴充性
B. 可行性、確定性和有窮性
C. 確定性、有窮性和穩定性
D. 易讀性、穩定性和安全性
三、填空題
1.下面程序段的時間復雜度是___O(n*m)____。
For (i=0;i<n;i++)
For (j=0;j<m;j++)
A[i][j]=0;
2.下面程序段的時間復雜度是___O(n^(1/2))____。
i=s=0
While(s<n)
{
i++; /* i=i+1 */
s+=i; /* s=s+i */
}
3.下面程序段的時間復雜度是___O(n^2)____。
s=0;
for (i=0;i<n;i++)
for (j=0;j<n;j++)
s+=B[i][j];
sum=s;
4.下面程序段的時間復雜度是__O(log3 N)(註:對N取3的對數)_____。
i=1;
While (i<=n)
i=i*3;
❼ 數據結構c語言
把scanf("%d ",&q->name);改成scanf("%s",q->name);。
把scanf("%d ",&q->score);改成scanf("%d",&q->score);。
函數studlist *CreateStudent()應該有一個返回值。若不需要返回值,請改成voidCreateStudent()。
if(p->Next->score<q->score)中p->Next->score並未賦值,怎麼能與q->score比較?這里就會跳出運行。
char name[3];中3太小隻能放下一個漢字或兩個字元。
適當的地方應該有釋放所申請的內存的語句。
❽ 數據結構C語言
++;
printf("第%d個數據:",i);
printf("%d\n",p->data);
p=head->next; //改成p=p->next
不是給你回答過一次嗎?
http://..com/question/13189159.html
這個是你問的吧,還把問題關了
上次我明明調式過了能回答的
❾ 數據結構(c語言版)
測試數據1:
創建二叉樹,輸入先序擴展序列:ABD##E##C#F##
先序遍歷輸出節點:ABDECF
中序遍歷輸出節點:DBEACF
後序遍歷輸出節點:DEBFCA
二叉樹示意圖:
A
/
BC
//
DE#F
///
######
測試數據2:
創建二叉樹,輸入先序擴展序列:ABC##DE#G##F###
先序遍歷輸出節點:ABCDEGF
中序遍歷輸出節點:CBEGDFA
後序遍歷輸出節點:CGEFDBA
二叉樹示意圖:
A
/
B#
/
CD
//
##EF
//
#G##
/
##
#include<stdio.h>
#include<stdlib.h>
typedefstructNode//二叉樹的結構體
{
chardata;//字元
structNode*lchild;//左分支
structNode*rchild;//右分支
}Bitree;
//創建二叉樹:用"先序遍歷"(遞歸法)
voidCreateBiTree(Bitree**bt)
{
charch;
scanf("%c",&ch);//輸入字元
if(ch=='#')//'#'是空節點NULL
*bt=NULL;
else
{
*bt=(Bitree*)malloc(sizeof(Bitree));
(*bt)->data=ch;
CreateBiTree(&((*bt)->lchild));
CreateBiTree(&((*bt)->rchild));
}
}
//用"先序遍歷"輸出節點(遞歸法)
voidpreOrder(Bitree*ptr)
{
if(ptr!=NULL)
{
printf("%c",ptr->data);
preOrder(ptr->lchild);
preOrder(ptr->rchild);
}
}
//用"中序遍歷"輸出節點(遞歸法)
voidinOrder(Bitree*ptr)
{
if(ptr!=NULL)
{
inOrder(ptr->lchild);
printf("%c",ptr->data);
inOrder(ptr->rchild);
}
}
//用"後序遍歷"輸出節點(遞歸法)
voidpostOrder(Bitree*ptr)
{
if(ptr!=NULL)
{
postOrder(ptr->lchild);
postOrder(ptr->rchild);
printf("%c",ptr->data);
}
}
intmain()
{
Bitree*root;
printf("創建二叉樹,輸入先序擴展序列:");
CreateBiTree(&root);
printf("先序遍歷輸出節點:");
preOrder(root);
printf(" 中序遍歷輸出節點:");
inOrder(root);
printf(" 後序遍歷輸出節點:");
postOrder(root);
printf(" ");
return0;
}