c語言數據結構
⑴ c語言數據結構
應該先學 語言,語言是編程的基礎。再學數據結構,數據結構主要用於 解決復雜的程序問題、程序思想等,沒有語言做基礎,很難學。
⑵ c語言數據結構pdf
強烈建議買國外版。數據結構(C語言版)—作者:(美)霍羅威茨等著,李建中等譯出版社:機械工業出版社本書的採用該類教材傳統的內容與組織結構。層次清晰,代碼質量很高。可以從書總的敘述看出作者的教學經驗。盡管有一定難度,但作者自始至終,都是從相對基礎知識開始講起,循序漸進。(比如c的數據存儲?式),這點比嚴蔚敏的那本好很多。最重要的是,書中的證明都很簡潔,與之相比嚴蔚敏的教材簡直就是噩夢(比如嚴的書中關於模式匹配的講解)。
⑶ C語言 數據結構
第一處:s->next=q->next;改為
s->next = p;
因前一句為q->next=s;
連起來相當於s->next = s;
這樣的鏈表是有一個環的,插入後再遍歷會導致死循環。
或者可以這樣把兩句倒過來寫:
s->next=q->next;
q->next=s;
兩種選一個。
第二處:
free(p);
插入一個節點無需free任何東西,因原有所有節點都需要保留。
⑷ c語言數據結構
#include<stdio.h>
#include<malloc.h>
#include<string.h>
struct student{ int age; char name[10]; struct student *next; } ;
void main() { struct student *p,*p1,*p2;
p1=(struct student *)malloc(sizeof(struct student)); if ( p1==NULL ) goto errorexit0;
strcpy(p1->name,"張三"); p1->age=30; p1->next=NULL;
p2=(struct student *)malloc(sizeof(struct student)); if ( p2==NULL ) goto errorexit1;
strcpy(p1->name,"李四"); p2->age=40; p2->next=NULL;
p=p1; p->next=p2;
printf("%s %s\n",p->name,(p->next)->name);
free(p1); free(p2); return;
errorexit1: free(p1); printf("申請節點2出錯。\n");
errorexit0: printf("申請節點1出錯。\n");
}
⑸ c語言數據結構
#include <stdlib.h>
#include <iostream>
#define OK 1
#define MVNum 100
typedef int Status;
typedef char VerTexType;
typedef int ArcType;
struct closedgestruct
{
VerTexType adjvex; //最小邊的頂點ArcType
ArcType lowcost; //最小邊的權值
}closedge[MVNum];
Status Min()
{
int x,N,min=closedge[1].lowcost;
for(x=1;x<=MVNum;x++)
{
if(min>closedge[x].lowcost)
min=closedge[x].lowcost;//找closedge數組中權值最小的那組
N=x;//N保存權值最小的那組的下標
}
std::cout<<N;//輸出最小權值對應的那組數組的下標
return OK;
}
⑹ c語言的數據結構是什麼
根據你的問題,我想一種計算機語言的數據結構,是指這種語言系統所提供的,在程序中存儲數據可以使用的基本數據組織形式。C語言的基本數據結構除了各種數據類型的簡單變數外,主要的就是數組、結構、聯合。
⑺ 數據結構和C語言有什麼區別
數據結構是數據及數據之間的關系,C語言只是一門編程語言,可以用C語言來寫程序,實現數據按照某種特定的關系來組織和管理數據(也就是實現數據結構),所以數據結構的課程會有不同的語言版本,其實就是用不同的語言來實現數據結構了。呵呵,不知道你明白沒有呢~~
⑻ C語言編寫 數據結構
#include<stdio.h>
#include<stdlib.h>
typedefstructintnumber
{
intn;
structintnumber*next;
}INTNUM;
INTNUM*creat(intnum)/*建立鏈表*/
{
INTNUM*p1,*p2,*head;
inti;
p1=(INTNUM*)malloc(sizeof(INTNUM));
head=p1;
p2=p1;
for(i=0;i<num-1;i++)
{
p1=(INTNUM*)malloc(sizeof(INTNUM));
p2->next=p1;
p2=p1;
}
p1->next=NULL;
returnhead;
}
voidinput(INTNUM*head)/*輸入鏈表數據*/
{
INTNUM*p;
p=head;
while(p->next!=NULL)
{
scanf("%d",&(p->n));
p=p->next;
}
scanf("%d",&(p->n));
}
voidoutput(INTNUM*head)/*輸出鏈表數據*/
{
INTNUM*p;
p=head;
while(p->next!=NULL)
{
printf("%d/t",p->n);
p=p->next;
}
printf("%d/n",p->n);
}
voidmain(void)
{
INTNUM*pa,*pb,*pc,*heada,*headb,*headc;/*pc是指向新鏈表的指針*/
intcounta,countb;/*counta,countb是建立鏈表的結點數*/
printf("請輸入建立A鏈表的結點數:");
scanf("%d",&counta);
pa=creat(counta);
heada=pa;
printf("請按遞增輸入A鏈表結點上的數據:");
input(heada);
printf("列印A鏈表結點上的數據:/n");
output(heada);
printf("請輸入建立B鏈表的結點數:");
scanf("%d",&countb);
pb=creat(countb);
headb=pb;
printf("請按遞增輸入B鏈表結點上的數據:");
input(headb);
printf("列印B鏈表結點上的數據:/n");
output(headb);
printf("將鏈表A和鏈表B仍然按照遞增關系合並成一個新的鏈表C:");
headc=heada;
pc=pa;
pa=pa->next;
while(pa&&pb)
{
if(pa->n<=pb->n)
{
pc->next=pa;
pc=pc->next;
pa=pa->next;
}
else
{
pc->next=pb;
pc=pc->next;
pb=pb->next;
}
}
pc->next=pa?pa:pb;
printf("列印合並後鏈表結點上的數據:/n");
output(headc);
}
結果如下:
請輸入建立A鏈表的結點數:3
請按遞增輸入A鏈表結點上的數據:12030
列印A鏈表結點上的數據:
12030
請輸入建立B鏈表的結點數:5
請按遞增輸入B鏈表結點上的數據:218222632
列印B鏈表結點上的數據:
218222632
將鏈表A和鏈表B仍然按照遞增關系合並成一個新的鏈表C:列印合並後鏈表結點上的數據:
12182022263032
⑼ c語言 數據結構(面向c語言)
只看書確實不行,要動手去做,人都有惰性,但要想成為強者你就要付出,當你戰勝你的惰性並自己動手做一些小程序時,你收獲的不僅僅是編寫出這些程序的成就感,更有成功的喜悅。我原來也是這樣不想去手去做,但老師布置的做作業都非常有針對性,一定要靜下心來去完成,可能剛開始做著很難或很慢,但堅持下去,相信你可以辦到的,學編程語言歸根結底還是學語言,就像你學英語等外國語言一樣,學語言就要多動口手,平時多積累,也許積累的過程很痛苦,但等有一天你回首就會發現你學到了很多。總而言之:堅持+動手=學會編程。
至於學習編程的論壇網站,給你一些個人覺得可以的:CSDN 編程論壇 編程愛好者論壇 VC知識庫等都不錯,你可以注冊一個號,平時有什麼問題直接上去問就行了,多學多動手,堅持下去,多問。
祝成功。。。。。。。。。