c語言版的數據結構
⑴ 數據結構(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;
}
⑵ C語言版數據結構
你試試看不要把你定義的頭文件存在include《》那裡面,編譯器不會找,在你的直接新建一個頭文件,存在和代碼一起的目錄,把你的定義的東西寫進去,再試試
⑶ C語言的數據結構是什麼
數據結構,data strucure 是具有特定關系的數據元素的集合。它包含兩方面的信息:D+S
D 即數據元素的集合,也就是數據對象;S 數據元素間的關系,而這種關系指的是數據元素之間本身的關系 也叫做邏輯結構!而這種邏輯結構需要通過一種高級語言 比如c語言才能使得將這種邏輯結構在計算機中表現出來 也就是通過高級語言存儲結構。
⑷ c語言版的數據結構和c++版的數據結構有什麼不同
C語言和C++描述數據結構最大的區別在於設置思想,C語言是一種結構化程序設計語言,而C++是一種面向對象的程序設計語言,它兩者的區別主要在於數據和操作的關系。
C語言是定義數據類型,數據類型定義變數,然後函數操作變數,換句話說C語言是「操作的數據」。
C++是定義類,類本身就具備操作,換句話說,C++是「數據的操作」。
⑸ c語言 數據結構
第一個,從定義的結構體來看是鏈隊,以鏈表來保存數據。
第二個,是順序隊列,以數組來保存數據。
下面回答你的問題:這兩個是不是表示的意思一樣的?都是表示循環隊列?
根據上面的解釋可知,他們兩的意思不一樣。鏈隊與順序隊列都是隊列,但實現方法不同。
至於循環隊列,一般是以第二種方式定義的。
⑹ 數據結構(C語言版)的內容簡介
《數據結構》(C語言版)是為「數據結構」課程編寫的教材,也可作為學習數據結構及其演算法的C程序設計的參數教材。
本書的前半部分從抽象數據類型的角度討論各種基本類型的數據結構及其應用;後半部分主要討論查找和排序的各種實現方法及其綜合分析比較。其內容和章節編排1992年4月出版的《數據結構》(第二版)基本一致,但在本書中更突出了抽象數據類型的概念。全書採用類C語言作為數據結構和演算法的描述語言。
本書概念表述嚴謹,邏輯推理嚴密,語言精煉,用詞達意,並有配套出版的《數據結構題集》(C語言版),便於教學,又便於自學。
本書後附有光碟。光碟內容可在DOS環境下運行的以類C語言描述的「數據結構演算法動態模擬輔助教學軟體,以及在Windows環境下運行的以類PASCAL或類C兩種語言描述的「數據結構演算法動態模擬輔助教學軟體」。
本書可作為計算機類專業或信息類相關專業的本科或專科教材,也可供從事計算機工程與應用工作的科技工作者參考。
⑺ 數據結構(c語言版)
談談如何學習數據結構:
1.如果你沒有學過C語言,或者C語言學的不好的時候把數據結構當成一本數學書來學,它所講述的都是一些簡單的圖論。在你的大腦中的主線不能丟失:線性結構,樹結構和圖結構。當你不再考慮復雜的程序設計時,僅僅研究個個離散點之間的關系,似乎數據結構也就不會那麼難了。
2.學習好了抽象的離散點關系後,再鞏固一下你的C語言水平,書中描述的都是類C。因此你只要學習簡單的C定義、判斷、循環語句就基本能看的懂課本中所有程序了。
3.以上都完成後,從數據結構的線性表開始。線性表中順序表似乎是為你學習C語言設計的,學好線性表的鏈表是你起步的關鍵。後面的樹結構,圖結構,排序,查找都少不了鏈式結構,往往這個也是最難的。
4.看程序的時候一定要自己在紙上畫畫,最好先學會畫程序的流程圖,也許那樣你學程序也就會更快一些。
5.數據結構是程序設計的最基本也是最有用的地方,學完之後你會受益匪淺的,也許這本書可以決定你以後的道路或者命運。
祝你成功!
⑻ 跪求數據結構(c語言版)的幾個問題解答
實驗一
單鏈表有一個頭節點h
e
a
d,指向鏈表在內存的首地址。鏈表中的每一個節點的數據類型為結構體類型,節點有兩個成員:整型成員(實際需要保存的數據)和指向下一個結構體類型節點的指針即下一個節點的地址(事實上,此單鏈表是用於存放整型數據的動態數組)。鏈表按此結構對各節點的訪問需從鏈表的頭找起,後續節點的地址由當前節點給出。無論在表中訪問那一個節點,都需要從鏈表的頭開始,順序向後查找。鏈表的尾節點由於無後續節點,其指針域為空,寫作為N
U
L
L。
刪除運算是將表的第i個結點刪去。
具體步驟:
(1)找到要刪除結點ai的存儲位置p(因為在單鏈表中結點ai的存儲地址是在其直接前趨結點ai-1的指針域next中)
(2)令p->next指向ai的直接後繼結點(即把ai從鏈上摘下)
(3)釋放結點ai的空間,將其歸還給"存儲池"。
插入運算是將值為x的新結點插入到表的第i個結點的位置上,即插入到ai-1與ai之間。
具體步驟:
(1)找到ai-1存儲位置p
(2)生成一個數據域為x的新結點*s
(3)令結點*p的指針域指向新結點
(4)新結點的指針域指向結點ai。
#include<stdio.h>
typedef
int
numtype;
typedef
float
scoretype;
typedef
struct
node
{numtype
num;
scoretype
score;
struct
node
*next;
}linklist;
int
n;
//創建單鏈表
linklist
*creat()
{
linklist
*head,*p1,*p2;
n=0;
p1=p2=(linklist*)malloc(sizeof(linklist));
printf("請輸入第1個學號:\n");
//單鏈表內容,學號和成績
scanf("%d",&p1->num);
printf("請輸入第1個成績:\n");
scanf("%f",&p1->score);
head=NULL;
while(1)
{n=n+1;
if(n==1)
head=p1;
else
p2->next=p1;
p2=p1;
p1=(linklist*)malloc(sizeof(linklist));
printf("請輸入第%d個學號:\n",n+1);
scanf("%d",&p1->num);
if(p1->num
==
0)
//這里是終止輸入的符號,也就是學號輸入0,那麼就停止輸入。你也可以設置為其它的符號
break;
printf("請輸入第%d個成績:\n",n+1);
scanf("%f",&p1->score);
}
p2->next=NULL;
return
head;
}
//單鏈表的插入
linklist
*insert(linklist
*head,linklist
*stud)
{
linklist
*p1,*p2,*p0;
p1=head;
p0=stud;
if(head==NULL)
{
head=p0;p0->next=NULL;}
else
{
while((p0->score>=p1->score)&&(p1->next!=NULL))
{
p2=p1;p1=p1->next;
}
if(p0->score<p1->score)
{
if(head==p1)
head
=p0;
else
p2->next=p0;
p0->next=p1;}
else
{
p1->next=p0;
p0->next=NULL;
}
}
return
head;
}
//單鏈表的刪除
linklist
*del(linklist
*head,float
dscore)
{
linklist
*p1,*p2;
if(head==NULL)
{printf("\n
list
is
NULL!");
return
(head);
}
else
{
p1=head;
while((dscore!=p1->score)&&(p1->next!=NULL))
{
p2=p1;
p1=p1->next;
}
if(dscore
==
p1->score)
{
if(p1==head)
head=head->next;
else
p2->next=p1->next;
free(p1);
printf("已刪除:%.2f\n",dscore);
}
else
printf("%.2f
沒有在鏈表中找到!\n",dscore);
}
return
head;
}
//輸出單鏈表
void
display(linklist
*r)
{linklist
*t;
t=(linklist*)malloc(sizeof(linklist));
t=r;
printf("\n
單鏈表顯示
:\n學號\t成績\n");
if(t==NULL)
printf("鏈表為空。");
else
while(t!=NULL)
{
printf("%d\t",t->num);
printf("%.2f\n
",t->score);
t=t->next;
}
printf("\n");
}
//單鏈表的插入與刪除
int
main()
{
float
s;
linklist
*q,*p;
p=(linklist*)malloc(sizeof(linklist));
q=creat();
display(q);
printf("請輸入要刪除的結點對應的成績:");
scanf("%f",&s);
q=del(q,s);
display(q);
printf("請輸入要插入的學號和成績:\n");
printf("學號:");
scanf("%d",&p->num);
printf("成績:");
scanf("%f",&p->score);
q=insert(q,p);
display(q);
return
0;
}
⑼ C語言版的數據結構問題
struct node *current; //定義一個臨時結構指針,指向當前結點
for(current=&h; (curren->data != a) && (current->next != NULL); )
current=next; //如果當前結點的值不等於a,並且不是最後一個結點,指向下一個結點
s.next=current->next; //找到滿足條件的節點後,插入結點s
current->next=&s;
⑽ 數據結構(c語言版)和數據結構區別
C語言是一種編程的語言,編程的語言有很多種。
而數據結構則是講的是關於一些數據的理論知識。
可以說不管什麼編程語言都能用到數據結構的知識,數據結構是程序設計基礎又核心的知識。
可以將c語言想像為一種語言,那麼數據結構就是一種說話的技巧,如何讓你說話更簡潔,有邏輯,容易讓人聽懂,這表達技巧不管你用中文或者ENGLISH都可以用上。
當然,如果你想成為一個優秀的程序設計人員,數據結構是必須掌握好的