數據結構課程設計案例精編
❶ 求 數據結構課程設計
用C++寫一個類, list, stack, tree或者其他都可以,網上很多數據結構的代碼了,隨版便照抄都行。http://code.ddvip.com/
如果嫌規模小了,就多寫幾個這樣的權類,把它做成一個庫,考試過關沒什麼問題了。
如果你自己寫出了這些,你的水平就提高很多了。
我以前就這么做,代碼寫的比較完善,分數還可以,90多。
❷ 數據結構課程設計題目,圖的建立以及遍歷。
//圖的遍歷演算法程序
//圖的遍歷是指按某條搜索路徑訪問圖中每個結點,使得每個結點均被訪問一次,而且僅被訪問一次。圖的遍歷有深度遍歷演算法和廣度遍歷演算法,程序如下:
#include <iostream>
//#include <malloc.h>
#define INFINITY 32767
#define MAX_VEX 20 //最大頂點個數
#define QUEUE_SIZE (MAX_VEX+1) //隊列長度
using namespace std;
bool *visited; //訪問標志數組
//圖的鄰接矩陣存儲結構
typedef struct{
char *vexs; //頂點向量
int arcs[MAX_VEX][MAX_VEX]; //鄰接矩陣
int vexnum,arcnum; //圖的當前頂點數和弧數
}Graph;
//隊列類
class Queue{
public:
void InitQueue(){
base=(int *)malloc(QUEUE_SIZE*sizeof(int));
front=rear=0;
}
void EnQueue(int e){
base[rear]=e;
rear=(rear+1)%QUEUE_SIZE;
}
void DeQueue(int &e){
e=base[front];
front=(front+1)%QUEUE_SIZE;
}
public:
int *base;
int front;
int rear;
};
//圖G中查找元素c的位置
int Locate(Graph G,char c){
for(int i=0;i<G.vexnum;i++)
if(G.vexs[i]==c) return i;
return -1;
}
//創建無向網
void CreateUDN(Graph &G){
int i,j,w,s1,s2;
char a,b,temp;
printf("輸入頂點數和弧數:");
scanf("%d%d",&G.vexnum,&G.arcnum);
temp=getchar(); //接收回車
G.vexs=(char *)malloc(G.vexnum*sizeof(char)); //分配頂點數目
printf("輸入%d個頂點.\n",G.vexnum);
for(i=0;i<G.vexnum;i++){ //初始化頂點
printf("輸入頂點%d:",i);
scanf("%c",&G.vexs[i]);
temp=getchar(); //接收回車
}
for(i=0;i<G.vexnum;i++) //初始化鄰接矩陣
for(j=0;j<G.vexnum;j++)
G.arcs[i][j]=INFINITY;
printf("輸入%d條弧.\n",G.arcnum);
for(i=0;i<G.arcnum;i++){ //初始化弧
printf("輸入弧%d:",i);
scanf("%c %c %d",&a,&b,&w); //輸入一條邊依附的頂點和權值
temp=getchar(); //接收回車
s1=Locate(G,a);
s2=Locate(G,b);
G.arcs[s1][s2]=G.arcs[s2][s1]=w;
}
}
//圖G中頂點k的第一個鄰接頂點
int FirstVex(Graph G,int k){
if(k>=0 && k<G.vexnum){ //k合理
for(int i=0;i<G.vexnum;i++)
if(G.arcs[k][i]!=INFINITY) return i;
}
return -1;
}
//圖G中頂點i的第j個鄰接頂點的下一個鄰接頂點
int NextVex(Graph G,int i,int j){
if(i>=0 && i<G.vexnum && j>=0 && j<G.vexnum){ //i,j合理
for(int k=j+1;k<G.vexnum;k++)
if(G.arcs[i][k]!=INFINITY) return k;
}
return -1;
}
//深度優先遍歷
void DFS(Graph G,int k){
int i;
if(k==-1){ //第一次執行DFS時,k為-1
for(i=0;i<G.vexnum;i++)
if(!visited[i]) DFS(G,i); //對尚未訪問的頂點調用DFS
}
else{
visited[k]=true;
printf("%c ",G.vexs[k]); //訪問第k個頂點
for(i=FirstVex(G,k);i>=0;i=NextVex(G,k,i))
if(!visited[i]) DFS(G,i); //對k的尚未訪問的鄰接頂點i遞歸調用DFS
}
}
//廣度優先遍歷
void BFS(Graph G){
int k;
Queue Q; //輔助隊列Q
Q.InitQueue();
for(int i=0;i<G.vexnum;i++)
if(!visited[i]){ //i尚未訪問
visited[i]=true;
printf("%c ",G.vexs[i]);
Q.EnQueue(i); //i入列
while(Q.front!=Q.rear){
Q.DeQueue(k); //隊頭元素出列並置為k
for(int w=FirstVex(G,k);w>=0;w=NextVex(G,k,w))
if(!visited[w]){ //w為k的尚未訪問的鄰接頂點
visited[w]=true;
printf("%c ",G.vexs[w]);
Q.EnQueue(w);
}
}
}
}
//主函數
void main(){
int i;
Graph G;
CreateUDN(G);
visited=(bool *)malloc(G.vexnum*sizeof(bool));
printf("\n廣度優先遍歷: ");
for(i=0;i<G.vexnum;i++)
visited[i]=false;
DFS(G,-1);
printf("\n深度優先遍歷: ");
for(i=0;i<G.vexnum;i++)
visited[i]=false;
BFS(G);
printf("\n程序結束.\n");
}
輸出結果為(紅色為鍵盤輸入的數據,權值都置為1):
輸入頂點數和弧數:8 9
輸入8個頂點.
輸入頂點0:a
輸入頂點1:b
輸入頂點2:c
輸入頂點3:d
輸入頂點4:e
輸入頂點5:f
輸入頂點6:g
輸入頂點7:h
輸入9條弧.
輸入弧0:a b 1
輸入弧1:b d 1
輸入弧2:b e 1
輸入弧3:d h 1
輸入弧4:e h 1
輸入弧5:a c 1
輸入弧6:c f 1
輸入弧7:c g 1
輸入弧8:f g 1
廣度優先遍歷: a b d h e c f g
深度優先遍歷: a b c d e f g h
程序結束.
❸ c語言課程設計案例精編
如果有來一定的基礎的話源,一樓的說的不錯先學學「數據結構」的相關知識!演算法在程序設計中有很「重要」的作用……其實學c主要是學編程的思想!你要是就一個個的死學案例,也只是會設計類似的東西!不會有創新,甚至有的地方會根本搞不明白。不知道你基礎怎麼樣?如果不是很好,就復習《數據結構吧》清華出版社 那本嚴蔚敏的數據結構(C語言版)。比較容易理解,最好還是要看些英文的原版數據結構的書。
當然如果你數據結構學得很好的話,比如你就是想通過一些案例的開發,來增強自己的實戰能力,你可以深入學習你說的那本書,其實你只要仔細看一下就會發現,其實案例設計的教程中文版的根本沒什麼創新都停留在以下幾個「經典問題」上,不同的版本也沒什麼太多的區別就是重印一下而已!這本書作為對編程基本功的訓練不錯!
案例一:貪吃蛇游戲
案例二:計算器
案例三:黑白棋游戲
案例四:迷宮問題
案例五:掃地雷游戲
案例六:速算24
案例七:數據結構CAI系統
案例八:進度調度
案例九:存儲管理分區分配演算法
案例十:通訊錄
案例十一:學生成績管理
案例十二:工資管理
案例十三:圖書借閱管理
案例十四:教師工作量計算
相關下載地址:
❹ 數據結構課程設計
這個是程序:
#include "string.h"
#define NULL 0
unsigned int key;
unsigned int key2;
int *p;
struct node
{
char name[20],address[20];
char num[11];
struct node *next;
}
**phone;
**nam;
**address;
typedef struct node *pnode;
typedef struct node *mingzi;
void hash(char num[11])
{
int i = 3;
key=(int)num[2];
while(num[i]!=NULL)
{
key+=(int)num[i];
i++;
key=key%17;
}
void hash2(char name[8])
{
int i = 1;
key2=(int)name[0];
while(name[i]!=NULL)
{
key2+=(int)name[i];
i++;
}
Key2=key2%17;
}
struct node* input()
{
struct node *temp=(struct node*)malloc(sizeof(struct node));
temp = new node;
temp->next=NULL;
printf("qing shu ru xing ming(no more then 8 chars) :\n");
scanf("%s",&temp->name);
printf"qing shu ru dian hua hao ma(no more then 11 numbers):\n");
scanf("%s",&temp->num);
printf("qing shu ru di (no more then 20 chars):\n");
scanf("%s",&temp->address);
return temp;
}
int add()
{
struct node *newphone;
struct node *newname;
newphone=input();
printf("ni de ji lu shi");
if(find(newphone->num))
{
printf("hao ma yi jing cun zai bu nene zai tian jia.\n");
return 0;
}
if(find2(newphone->name))
{
printf("xing ming yi jing cun zai bu neng zai tian jia.\n");
return 0;
}
printf("%s_%s_%s\n",newphone->name,newphone->address,newphone->num);
newname=newphone;
newphone->next=NULL;
newname->next=NULL;
hash(newphone->num);
hash2(newname->name);
newphone->next = phone[key]->next;
phone[key]->next=newphone;
newname->next = nam[key2]->next;
nam[key2]->next=newname;
return 0;
}
int find(char num[11])
{
int isfind=0;
struct node *q;
hash(num);
node *q=phone[key]->next;
while(q!= NULL)
{
if(strcmp(num,q->num) ==0)
{
isfind=1;
break;
}
q=q->next;
}
if(isfind)
printf("%s_%s_%s\n",q->name,q->address,q->num);
return isfind;
}
int find2(char name[8])
{
int isfind=0;
hash2(name);
struct node *q=nam[key2]->next;
while(q!= NULL)
{
if(strcmp(name,q->name)==0)
{
isfind=1;
break;
}
q=q->next;
}
if(isfind)
printf("%s_%s_%s\n",q->name,q->address,q->num);
return isfind;
}
void create()
{
int i;
phone = (pnode*)malloc(13*sizeof(pnode));
for(i=0;i<13;i++)
{
phone[i]=(struct node*)malloc(sizeof(struct node));
phone[i]->next=NULL;
}
}
void create2()
{
int i;
nam = (mingzi*)malloc(13*sizeof(mingzi));
for(i=0;i<13;i++)
{
nam[i]=(struct node*)malloc(sizeof(struct node));
nam[i]->next=NULL;
}
}
void list()
{
int i;
struct node *p;
for(i=0;i<13;i++)
{
p=phone[i]->next;
while(p)
{
printf("%s_%s_%s\n",p->name,p->address,p->num);
p=p->next;
}
}
}
void list2()
{
int i;
struct node *p;
for(i=0;i<13;i++)
{
p=nam[i]->next;
while(p!=NULL)
{
printf("%s_%s_%s\n",p->name,p->address,p->num);
p=p->next;
}
}
}
void menu()
{
printf("0.tian jia ji lv.\n");
printf("2.cha zhao ji lu.\n");
printf("3.xing ming lie biao.\n");
printf("4.hao ma lie biao.\n");
printf("5.qing chu suo you ji lu.\n");
printf("6.tui chu xi tong.\n");
}
int main()
{
char num[11];
char name[8];
int sel;
create();
create2();
while(1)
{
menu();
scanf("%d",&sel);
if(sel==3)
{
char b;
printf("Input 9 to search with number,8 to name.\n");
b=getch();
if(b=='9')
{
printf("Please input the number:\n");
scanf("%s",&num);
if(!find(num))
printf("Record not exist.\n");
}
else if(b=='8')
{
printf("Please input the name:\n");
scanf("%s",&name);
if(!find(name))
printf("Record not exist.\n");
}
else
{
printf("Wrong input!Please input again!\n");
continue;
}
}
else if(sel==2)
{
printf("All record with name:\n");
list2();
}
else if(sel==0)
{
printf("Please input the information:\n");
add();
}
else if(sel==4)
{
printf("All record with number:\n");
list();
}
else if(sel==5)
{
create();
create2();
printf("All records have been removed.\n");
}
else if(sel==6)
{printf("7");
break;
}
}
return 0;
}
❺ 數據結構課程設計,求大神助攻
數據結構課程設計,求大神助攻
你這個怎麼說,我,才好幫到你
嗯知道的的意思
❻ 救急!!!數據結構課程設計
//----------定義頭文件---------------//
#include <iostream>
#include <string>
using namespace std;
typedef struct
{
char letter;
char *chinese;
}ElemType;//字母-漢字元素表的對應類型
typedef struct SqList
{
ElemType *elem;
int length;
}SqList;//字母-漢字對應表
//----------------生成字母-漢字對應表----------------//
void BuildLookupTable(SqList *&sq)
{
sq = new SqList;
sq->length = 10;
sq->elem = new ElemType[10];
sq->elem[0].letter = 't';
sq->elem[0].chinese = "天";
sq->elem[1].letter = 'd';
sq->elem[1].chinese = "地";
sq->elem[2].letter = 's';
sq->elem[2].chinese = "上";
sq->elem[3].letter = 'a';
sq->elem[3].chinese = "一個";
sq->elem[4].letter = 'e';
sq->elem[4].chinese = "鵝";
sq->elem[5].letter = 'z';
sq->elem[5].chinese = "追";
sq->elem[6].letter = 'g';
sq->elem[6].chinese = "趕";
sq->elem[7].letter = 'x';
sq->elem[7].chinese = "下";
sq->elem[8].letter = 'n';
sq->elem[8].chinese = "蛋";
sq->elem[9].letter = 'i';
sq->elem[9].chinese = "恨";
}
//---------定義元素e在字母-漢字對應表中的位置------------//
int LocateElem(SqList *sq,char e)
{
int i;
for(i=0;i<10;i++)
{
if (sq->elem[i].letter == e)
return i;
}
return -1;
}
//------------------定義全局變數------------------------//
int top=0;
int find=0;
char transl[200];
char leag[200];
char link[100];
int rear=1;
//----------------------main()主函數---------------------//
int main()
{
SqList *sq;
sq=new SqList;
char pop(); //定義出棧函數
char ml[2][200]; //定義兩個規則,把它們存放到ml中
cout<<endl;
cout<<" ** ===魔王語言程序設計=== ** "<<endl;
cout<<" ******************************************************* "<<endl;
cout<<" ******************************************************* "<<endl;
cout<<" ** 本程序可以翻譯魔王語言且按以下兩條形式規則由人** "<<endl;
cout<<" ** ** "<<endl;
cout<<" **的語言逐步抽象上去: ** "<<endl;
cout<<" ** ** "<<endl;
cout<<" **①α->ββββ... ** "<<endl;
cout<<" ** ** "<<endl;
cout<<" **②(θβββ)->θβθβθβθ ** "<<endl;
cout<<" ** ** "<<endl;
cout<<" ** 下面只輸入個第一種形式的規則,且後輸入的可以嵌** "<<endl;
cout<<" ** ** "<<endl;
cout<<" **套已輸入的規則。 ** "<<endl;
cout<<" ** 魔王語言支持下列字元: ** "<<endl;
cout<<" **'A', 'B', 'a', 'd', 'e', 'g', 'i', 'n', 's','t', ** "<<endl;
cout<<" **'x', 'z', '(', ')' ** "<<endl;
cout<<" ******************************************************* "<<endl;
cout<<" ******************************************************* "<<endl;
cout<<"********************************************************************************";
//本程序可以翻譯魔王語言且按以下兩條形式規則由人的語言逐步抽象上去:
// ①α->ββββ...
// ②(θβββ)θβθβθβθ
//下面只輸入個第一種形式的規則,且後輸入的可以嵌套已輸入的規則
//
/*開始輸入規則A和B,A比B先輸入,再輸入B,這樣B就可以嵌套A*/
cout<<"以下請開始翻譯:"<<endl;
cout<<"請先輸入一組形式規則:"<<endl;
cout<<"A->";
cin>>ml[0];
cout<<"B->";
cin>>ml[1];
cout<<endl;
/*輸入魔王語言,其規則為大寫為魔王語言,只限定A和B(暫時),小寫為人類語言,輸入時用括弧括起來*/
cout<<"請輸入要解釋的魔王語言:";
cin>>leag;
char temp[100]; //定義一個緩沖區,存放B的翻譯
int sizeA=0; //定義A的長度
sizeA=strlen(ml[0]);
int wh=0; //定義緩沖區中的位置變數
for(int i=0;ml[1][i]!='\0';i++) //開始翻譯B
{
if(ml[1][i]=='A') //如果嵌套了A
{
for(int n=0;n<sizeA;n++,wh++)
{
temp[wh]=ml[0][n]; //翻譯至緩存區
}
}
else
{
temp[wh]=ml[1][i]; //如果不是A則原樣寫入
wh++;
}
}
temp[wh]=0; //為緩存區加上結束符
strcpy(ml[1],temp); //把緩存區中的串給ml[1]
int sizeB=0; //定義B的長度
sizeB=strlen(ml[1]);
int length;
length=strlen(leag); //取得魔王語言的長度
int ch; //定義一個變數保存字元
int a;
int b;
/*-------開始翻譯魔王語言,並把結果存至transl中------------*/
for(int t=0;t<length;t++)
{
ch=pop();
switch(ch)
{
case 'A': //如果是A的話
for(a=0;a<sizeA;a++,find++)
{
transl[find]=ml[0][a];
}
break;
case 'B': //如果是B的話
for(b=0;b<sizeB;b++,find++)
{
transl[find]=ml[1][b];
}
break;
case '(': //但ch='('時,把括弧中的小寫字母保存至link中
ch=pop();
link[0]=ch; //先把第一個字元存入,後面的從link[1]開始
while(ch!=')')
{
ch=pop();
link[rear]=ch; //記得rear的初值為
rear++;
}
//由於while循環的原因,在link隊列中多加了一個右括弧字元,且rear指針向後多移了個單位
//故使rear減
rear=rear-2;
transl[find++]=link[0];
for(rear;rear!=0;rear--)
{
transl[find++]=link[rear];
transl[find++]=link[0];
}
//為了使後面的翻譯可行話,得把rear還原為初值,即rear=1
rear=1;
break;
default:break;
}//switch結束
/*--------翻譯魔鬼語言結束,結果已存至transl中------------*/
}//for結束
char *word;
word=new char;
BuildLookupTable(sq); //調用該函數生成字母-漢字對應表
int i=0;
//--------------輸出轉換之後的漢字--------------------//
while (transl[i]!=NULL)
{
*word = transl[i];
cout<<sq->elem[LocateElem(sq, *word)].chinese;
i++;
}
delete word;
}
char pop()//出棧函數的實現
{
return leag[top++];
}
❼ 數據結構課程設計題目~大神幫忙~謝謝
這個跟打字游戲的原理有點像啊,我以前寫過一個,你可以下載下來參回考,不過是用圖形庫答編的
http://blog.csdn.net/blank__box/article/details/53014644