當前位置:首頁 » 課程大全 » 騎士游歷數據結構課程設計

騎士游歷數據結構課程設計

發布時間: 2021-02-06 16:54:53

Ⅰ 數據結構課程設計:設有n個人圍坐在一個圓桌周圍,編號為1,2,…,n。現在從第s個人開始逆序報數,即:第s個

= =···你現在還要代碼么····我剛剛碼完的題····不過我只用了循環單鏈表

Ⅱ 《數據結構》課程設計題目急急!!!!

又來了
這個是學生的管理的 改改吧
#include<iostream.h>
#include"string.h"
#include "process.h"
#include <stdio.h>
struct Node
{
int age;
char* name;
Node* next;

};
struct newnode
{
char newname[20];
int newage;

};
void AddTohead(Node* node,char* name,int age)
{
if(!node)
return;
Node* newnode = new Node;
if(name)
{
int cd = strlen(name)+1;
newnode->name = new char [cd];
strcpy(newnode->name,name);
}
else newnode->name = NULL;
newnode->age = age;
newnode->next = node->next;
node->next = newnode;

}
void Show(Node* node)
{
Node* p = NULL;

p = node->next;
while(p!=NULL&&p->name!=NULL)//我的軟肋 我沒有注意指針的真正的指向 以後要注意 這是我看以前的程序中看出來的問題 while(p)這是我原先寫 切記切記
{ //看完程序後我還是沒寫對 我寫對了
cout<<p->name<<" "<<p->age<<endl;

p = p->next;

}

}
void Delete(Node* node)
{
Node* del;
while(node->next)
{
del = node->next;
if(del->next)
delete [] del->name;
node->next = del->next;
delete del;

}

}
void AddToList(Node* node,char* name,int age)
{
if(!node)
return;
Node* newnode = new Node;
while(node->next)
node = node->next;
if(name)
{
int cd = strlen(name)+1;
newnode->name = new char [cd];
strcpy(newnode->name,name);
}
else newnode->name = NULL;
newnode->age = age;
node->next = newnode;
newnode->next = NULL;

}
void FindAndAdd(Node* node,char* findname,char* addname,int addage,int canshu)
{
if(!node)
return;
Node* head = node;
Node* m = NULL;
m = node->next;
do
{
if (!strcmp(m->name,findname))
break;
m = m->next;
} while (m);

if(m==NULL)
{
cout<<"nobody"<<endl;
}
else
{
switch(canshu)
{
case 1:
{
Node* p = head;
while(p->next!= m )
{
p = p->next;
}
Node* newnode = new Node;
if(addname)
{
int cd = strlen(addname)+1;
newnode->name = new char [cd];
strcpy(newnode->name,addname);
}
else
{
newnode->name = new char;
strcpy(newnode->name,"somebody");
}
newnode->age = addage;
newnode->next = p->next;
p->next = newnode;

} break;
case 2:
{
Node* newnode = new Node;
if(addname)
{
int cd = strlen(addname)+1;
newnode->name = new char [cd];
strcpy(newnode->name,addname);

}
else
{
newnode->name = new char;
strcpy(newnode->name,"somebody");
}
newnode->age = addage;
newnode->next = m->next;
m->next = newnode;

} break;
default:break;
}

}

}
void DelSomeBody(Node* node,char* name)
{
if(!node)
return;
Node* head = node;
if(!name)
cout<<"the name please";
else
{
Node* p = node->next;
Node* m = node;
while(m)
{
if(!strcmp(p->name,name))
break;
m = m->next;
p = p->next;
}
if(p==NULL)
{
cout<<"no one";
}
else
{
while(head->next!= p)
head = head->next;
delete [] p->name;
head->next = p->next;
delete p;

}
}
}

void Change(Node* node,char* name,char* newname,int age)
{
if(!node)
return;
Node* head = node;
if(!name)
cout<<"the name please";
else
{
Node* p = node->next;
Node* m = node;
while(m)
{
if(!strcmp(p->name,name))
break;
m = m->next;
p = p->next;
}
if(p==NULL)
{
cout<<"no one";
}
else
{
int cd = strlen(newname)+1;
p->name = new char [cd];

strcpy(p->name,newname);
p->age = age;
}

}

}
void Find(Node* node,char* findname)
{

if(!node)
return;
Node* head = node;
Node* m = NULL;
m = node->next;
if(!m)
cout<<"鏈表為空的 不存在 請選擇操作"<<endl;
return;
do
{
if (!strcmp(m->name,findname))
break;
m = m->next;
} while (m);

if(m==NULL)
{
cout<<"nobody"<<endl;
}
else
{
cout<<m->name<<"的年齡是"<<m->age<<endl;

}

}

void CleanTheWindow()
{
system("cls");
}

void Keep(Node* node,char* fname)
{
Node* p = node->next;
newnode newd;
FILE* ip = fopen(fname,"wb");
if(!ip)
{
cout<<"wrong"<<endl;
return;
}
while(p)
{
strcpy(newd.newname,p->name);
newd.newage = p->age;
fwrite(&newd,sizeof(newnode),1,ip);
p = p->next;

}
fclose(ip);
}
void CreatList(Node* node,char* fname)
{
newnode newd;
FILE* ip =fopen(fname,"rb");
if(!ip)
{
cout<<"wrong"<<endl;
return;
}
Delete(node);
while(!feof(ip))
{
int a =fread(&newd,sizeof(newnode),1,ip);
if(a==1)
AddTohead(node,newd.newname,newd.newage);

}
fclose(ip);

}

void main()
{
Node node;
node.age = NULL;
node.name = NULL;
node.next = NULL;

while(1)

{
cout<<"請選擇您的操作1:添加到頭部(輸入姓名,年齡)"<<endl;
cout<<" 2:添加到尾部(輸入姓名,年齡)"<<endl;
cout<<" 3:查找某人的年齡 "<<endl;
cout<<" 4:在某人的前面或後面插入"<<endl;
cout<<" (輸入查找的姓名,輸入要插入的名字,輸入要插入的名字,和年齡)"<<endl;
cout<<" (輸入插入類型1:在前插入 2:在後插入)"<<endl;
cout<<" 5:修改某人的信息(輸入要修改人的名字 輸入要修改的信息姓名,年齡)"<<endl;
cout<<" 6:刪除某人的信息(輸入你要刪除的人的姓名)"<<endl;
cout<<" 7:刪除鏈表"<<endl;
cout<<" 8:顯示"<<endl;
cout<<" 9:清屏"<<endl;
cout<<" 10:保存"<<endl;
cout<<" 11:顯示保存的內容"<<endl;
cout<<" 0:退出"<<endl;
int a;
cin>>a;//如何對輸入的數據進行判斷,比如我輸入adfd字元型的時候,我想提示用戶輸入錯誤

switch(a)
{
case 1:
{
cout<<"請輸入要加在頭部的姓名和年齡"<<endl;
char* name = new char;
int age;
cin>>name;
cin>>age;
AddTohead(&node,name,age);
cout<<"加入頭部完成 請選擇下一步操作"<<endl;
} break;
case 2:
{
cout<<"請輸入要加在尾部的姓名和年齡"<<endl;
char* name = new char;
int age;
cin>>name;
cin>>age;
AddToList(&node,name,age);
cout<<"加入尾部完成 請選擇下一步操作"<<endl;
} break;
case 3:
{
cout<<"請輸入要查找人的姓名"<<endl;
char* name = new char;
cin>>name;
Find(&node,name);
} break;
case 4:
{
cout<<"請按上面的輸入"<<endl;
char* name = new char;
char* name2 = new char;
int age;
int cs;
cin>>name;
cin>>name2;
cin>>age;
cin>>cs;
FindAndAdd(&node,name,name2,age,cs);
cout<<"4輸入完成"<<endl;

} break;
case 5:
{
cout<<"輸入要修改的信息和修改的信息"<<endl;
char* name = new char;
char* name2 = new char;
int age;
cin>>name;
cin>>name2;
cin>>age;
Change(&node,name,name2,age);
cout<<"修改完成"<<endl;

} break;
case 6:
{
cout<<"輸入要刪除的姓名"<<endl;
char* name = new char;
cin>>name;
DelSomeBody(&node,name);
cout<<"刪除完成"<<endl;
} break;
case 7:
{
cout<<"確定要刪除全部的鏈表嗎?1 是 2否"<<endl;
int npd;
cin>>npd;
if(npd==1)
{
Delete(&node);
}
else break;
} break;
case 8:
{
cout<<"當前的鏈表是"<<endl;
Show(&node);
} break;
case 9:
{
CleanTheWindow();
} break;
case 10:
{
cout<<"請輸入要保存的文件的名稱"<<endl;
char a[10];
cin>>a;
Keep(&node,a);
}
break;
case 11:
{
cout<<"請輸入保存的文件的名稱"<<endl;
char a[10];
cin>>a;
CreatList(&node,a);
Show(&node);
}
break;
case 0:
{
goto stop;

} break;
default :cout<<"輸入有誤重新輸入"<<endl;

}
}

stop: cout<<"exit"<<endl;

}
其實我也很菜的

Ⅲ 求大神幫忙寫個程序:數據結構課程設計的題目 題目見補充處 希望大神們幫忙,拜託拜託~~

給你其實是在害你,給你知識點,如果還不會再來問我
線性代數的學習切入點:線性方程組。換言之,可以把線性代數看作是在研究線性方程組這一對象的過程中建立起來的學科。
線性方程組的特點:方程是未知數的一次齊次式,方程組的數目s和未知數的個數n可以相同,也可以不同。
關於線性方程組的解,有三個問題值得討論:
(1)、方程組是否有解,即解的存在性問題;
(2)、方程組如何求解,有多少個解;
(3)、方程組有不止一個解時,這些不同的解之間有無內在聯系,即解的結構問題。
高斯消元法,最基礎和最直接的求解線性方程組的方法,其中涉及到三種對方程的同解變換:
(1)、把某個方程的k倍加到另外一個方程上去;
(2)、交換某兩個方程的位置;
(3)、用某個常數k乘以某個方程。我們把這三種變換統稱為線性方程組的初等變換。
任意的線性方程組都可以通過初等變換化為階梯形方程組。
由具體例子可看出,化為階梯形方程組後,就可以依次解出每個未知數的值,從而求得方程組的解。
對方程組的解起決定性作用的是未知數的系數及其相對位置,所以可以把方程組的所有系數及常數項按原來的位置提取出來,形成一張表,通過研究這張表,就可以判斷解的情況。我們把這樣一張由若干個數按某種方式構成的表稱為矩陣。
可以用矩陣的形式來表示一個線性方程組,這至少在書寫和表達上都更加簡潔。
系數矩陣和增廣矩陣。
高斯消元法中對線性方程組的初等變換,就對應的是矩陣的初等行變換。階梯形方程組,對應的是階梯形矩陣。換言之,任意的線性方程組,都可以通過對其增廣矩陣做初等行變換化為階梯形矩陣,求得解。
階梯形矩陣的特點:左下方的元素全為零,每一行的第一個不為零的元素稱為該行的主元。
對不同的線性方程組的具體求解結果進行歸納總結(有唯一解、無解、有無窮多解),再經過嚴格證明,可得到關於線性方程組解的判別定理:首先是通過初等變換將方程組化為階梯形,若得到的階梯形方程組中出現0=d這一項,則方程組無解,若未出現0=d一項,則方程組有解;在方程組有解的情況下,若階梯形的非零行數目r等於未知量數目n,方程組有唯一解,若r在利用初等變換得到階梯型後,還可進一步得到最簡形,使用最簡形,最簡形的特點是主元上方的元素也全為零,這對於求解未知量的值更加方便,但代價是之前需要經過更多的初等變換。在求解過程中,選擇階梯形還是最簡形,取決於個人習慣。
常數項全為零的線性方程稱為齊次方程組,齊次方程組必有零解。
齊次方程組的方程組個數若小於未知量個數,則方程組一定有非零解。
利用高斯消元法和解的判別定理,以及能夠回答前述的基本問題(1)解的存在性問題和(2)如何求解的問題,這是以線性方程組為出發點建立起來的最基本理論。
對於n個方程n個未知數的特殊情形,我們發現可以利用系數的某種組合來表示其解,這種按特定規則表示的系數組合稱為一個線性方程組(或矩陣)的行列式。行列式的特點:有n!項,每項的符號由角標排列的逆序數決定,是一個數。
通過對行列式進行研究,得到了行列式具有的一些性質(如交換某兩行其值反號、有兩行對應成比例其值為零、可按行展開等等),這些性質都有助於我們更方便的計算行列式。
用系數行列式可以判斷n個方程的n元線性方程組的解的情況,這就是克萊姆法則。
總而言之,可把行列式看作是為了研究方程數目與未知量數目相等的特殊情形時引出的一部分內容

Ⅳ 數據結構課程設計

這個是程序:
#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;
}

Ⅳ 數據結構課程設計作業

的深度優先周遊
void dfs(Graph g,Vertex v)
{
Vertex v1;
v.mark = TRUE;
for(v1=firstAdjacent(g,v); v1!= NULL; v1=nextAdjacent(g,v,v1))
dfs(g,v1);
}
void dft(Graph g)
{
Vertex v;
for(v=firstVertex(g); v!= NULL; v=nextVertex(g,v))
{
if(v.mark==FALSE)
dfs(g,v);
}
}
看一下能行嗎,行的話我再把廣度優先寫上。

很多版啊非常的多權,不過我還是比較相信比較老的店鋪了!!或者你有沒有朋友在網上買過的,可以讓他推薦下,我就是經常在同事推薦的淘西東好店買過很多東西,暫時沒出現問題。時尚快購吧,就是這樣的一個網站。裡面有很多淘寶的高信用賣家。

Ⅵ 誰有數據結構課程設計集合交並運算啊

#include<iostream>
#include<cstdlib>
#include<cstdio>
using namespace std;

#define ElemType char

typedef struct ElemNode
{
ElemType elem;
struct ElemNode *next;
}ElemNode, *Set;

//-------------FunctionList------------------------------
//---------------函數原型--------------------------------
int LengthOf(Set src);//返回一個集合的長度
void CreateSet(Set dest);//創建一個新的字母集合,限定a-z
void EmptySet(Set dest);//清空一個集合,保留頭結點
void DestroySet(Set dest);//銷毀集合
void SortSet(Set dest);//對一個集合進行從小到大的排序
void DisplaySet(Set src);//列印集合的所有元素

int ExistElem(Set dest, ElemType e);//判斷元素是否存在於集合中
void DelElem(Set dest, ElemType e);//刪除集合中的一個元素一次
void AddElem(Set dest, ElemType e);//在鏈表尾部追加一個元素
void ContactSet(Set dest, Set src);//連接一個集合到另一個集合
void AddSet(Set dest, Set src1, Set src2);//集合並運算
void MulSet(Set dest, Set src1, Set src2);//集合交運算
void SubSet(Set dest, Set src1, Set src2);//集合差運算
int ExistSubset(Set dest, Set src);//子集判斷
void NegSet(Set dest, Set src);//求補集

int main()
{
Set dest=(Set)malloc(sizeof(ElemNode));
Set src1=(Set)malloc(sizeof(ElemNode));
Set src2=(Set)malloc(sizeof(ElemNode));
dest->next=NULL;
cout<<"輸入兩個集合:"<<endl;
CreateSet(src1);CreateSet(src2);
cout<<endl;
cout<<"Set1 = ";DisplaySet(src1);
cout<<"\t";
cout<<"Set2 = ";DisplaySet(src2);
cout<<endl<<endl;
int item;
cout<<"1->集合並"<<" "<<"2->集合交"<<" "<<"3->集合差"<<" "<<"非零整數->錯誤!重輸"<<" "<<"0->進入下一步演示"<<endl;
while(cin>>item)
{
if(item)
switch(item)
{
case 1: cout<<"集合並運算:Set1∪Set2 = ";
AddSet(dest, src1, src2);
DisplaySet(dest);
EmptySet(dest);
cout<<endl;break;
case 2: cout<<"集合交運算:Set1∩Set2 = ";
MulSet(dest, src1, src2);
DisplaySet(dest);
EmptySet(dest);
cout<<endl;break;
case 3: cout<<"集合差運算:Set1-Set2 = ";
SubSet(dest, src1, src2);
DisplaySet(dest);
EmptySet(dest);
cout<<endl;break;
default: cout<<"輸入錯誤!重輸!!!"<<endl;break;

}
else {cout<<"進入下一步演示..."<<endl;break;} // 此處在VC++ 6.0 運行與CFree中有點不同(在CFree中要按下回車~~~)

}
getchar();
cout<<"輸入一個集合:"<<endl;
CreateSet(dest);
cout<<"原集合為:";
DisplaySet(dest);
cout<<endl<<endl;
char ch;
cout<<"在鏈表尾部添加一個元素ch = ";
cin>>ch;
AddElem(dest, ch);
DisplaySet(dest);
cout<<endl<<endl;
cout<<"刪除集合中的存在的某個元素ch = "; cin>>ch;
DelElem(dest, ch);
DisplaySet(dest);cout<<endl<<endl;
cout<<"再創建一個集合src = ";
Set src=(Set)malloc(sizeof(ElemNode));
getchar();
CreateSet(src);
cout<<"將src集合鏈接到集合dest中..."<<endl;
ContactSet(dest, src);
cout<<"此時dest為:";
DisplaySet(dest);
cout<<endl;
if(ExistSubset(dest, src))
cout<<"此時src是dest的子集..."<<endl;
else
cout<<"此時src不是dest的子集..."<<endl;
cout<<endl<<"dest = ";
DisplaySet(dest);
cout<<endl;
cout<<"dest的補集是:";
Set p=(Set)malloc(sizeof(ElemNode));
p->next=NULL;
NegSet(p, dest);
DisplaySet(p);
cout<<endl<<"演示結束!!!"<<endl;
DestroySet(dest);
return 0;
}

//---------------BasicFunctions-----------------------
//------------------函數實現--------------------------
int LengthOf(Set src)
{
//返回一個集合的長度
int i=0;
while(src->next!=NULL)
{
i++;
src=src->next;
}
return i;
}//LengthOf

void CreateSet(Set dest)
{
//創建一個新的字母集合,限定a-z
ElemType ch;
Set p=dest,n;
for(;;)
{
ch=getchar();
if(ch=='\n') break;
if(ch<97||ch>122) continue;
n=(Set)malloc(sizeof(ElemNode));
p->next=n;
n->elem=ch;
n->next=NULL;
p=n;
}
return ;
}//CreateSet

void EmptySet(Set dest)
{
//清空一個集合,保留頭結點
Set p,n;
while(dest->next!=NULL)
{
p=dest;
n=p->next;
for(;n->next!=NULL;)
{
p=n;
n=n->next;
}
free(n);
p->next=NULL;
}
}//EmptySet

void DestroySet(Set dest)
{
//銷毀集合
EmptySet(dest);
free(dest);
}//DestroySet

void SortSet(Set dest)
{
//對一個字母集合進行從小到大的排序
int i,j,l,flag;
Set p,q,n;
l=LengthOf(dest);
if(l<2) return;
flag=1;
for(i=l-1;i>0&&flag==1;i--)
{
flag=0;
p=dest;
q=p->next;
n=q->next;
for(j=0;j<i;j++)
{
if(q->elem>n->elem)
{
flag=1;
p->next=n;
q->next=n->next;
n->next=q;
q=p->next;
n=q->next;
}
p=q;
q=n;
n=n->next;
}
}
}//SortSet

void DisplaySet(Set src)
{
//列印集合的所有元素
Set p;
if(src->next==NULL)
{
printf("φ");
return ;
}
p=src;
do
{
p=p->next;
putchar(p->elem);
} while(p->next!=NULL);
}//DisplaySet

int ExistElem(Set dest, ElemType e)
{
//判斷元素是否存在於集合中
Set p=dest;
if(LengthOf(p)==0)
return 0;
else{
p=p->next;
while(p->elem!=e)
{
if(p->next==NULL)
return 0;
p=p->next;
}
return 1;
}
}//ExistElem

void DelElem(Set dest, ElemType e)
{
//刪除集合中的一個元素一次
Set p=dest,q;
if(LengthOf(p)==0)
return ;
q=p->next;
if(LengthOf(p)==1)
{
p->next=NULL;
free(q);
}
while(q->elem!=e)
{
p=p->next;
q=q->next;
}
if(q->next==NULL)
{
p->next=NULL;
free(q);
}
else
p->next=q->next;
}//DelElem

void AddElem(Set dest, ElemType e)
{
//在鏈表尾部追加一個元素
Set p=dest, n;
while(p->next!=NULL)
p=p->next;
n=(Set)malloc(sizeof(ElemNode));
p->next=n;
n->elem=e;
n->next=NULL;
}//AddElem

void ContactSet(Set dest, Set src)
{
//連接一個集合到另一個集合
Set p=dest;
while(p->next!=NULL)
p=p->next;
p->next=src->next;
}//ContactSet

void AddSet(Set dest, Set src1, Set src2)
{
//集合並運算
SortSet(src1);SortSet(src2);
int i=0,j=0,len1=LengthOf(src1),len2=LengthOf(src2);
src1=src1->next;src2=src2->next;
while(i<len1&&j<len2)
{
if(src1->elem<=src2->elem)
{
i++;
if(!ExistElem(dest, src1->elem))
{
AddElem(dest, src1->elem);
src1=src1->next;
}
else
{
src1=src1->next;
}
}
else
{
j++;
if(!ExistElem(dest, src2->elem))
{
AddElem(dest, src2->elem);
src2=src2->next;
}
else
{
src2=src2->next;
}
}
}
while(i<len1)
{
i++;
if(!ExistElem(dest, src1->elem))
{
AddElem(dest, src1->elem);
src1=src1->next;
}
}
while(j<len2)
{
j++;
if(!ExistElem(dest, src2->elem))
{
AddElem(dest, src2->elem);
src2=src2->next;
}
}
}//AddSet

void MulSet(Set dest, Set src1, Set src2)
{
//集合交運算
SortSet(src1);SortSet(src2);
int i=0,j=0,len1=LengthOf(src1),len2=LengthOf(src2);
src1=src1->next;src2=src2->next;
while(i<len1&&j<len2)
{
if(src1->elem<src2->elem) {i++;src1=src1->next;}
else if(src1->elem>src2->elem) {j++;src2=src2->next;}
else
{
i++;j++;
if(!ExistElem(dest, src1->elem))
{
AddElem(dest, src1->elem);
src1=src1->next;
src2=src2->next;
}
}
}
}//MulSet

void SubSet(Set dest, Set src1, Set src2)
{
//集合差運算
SortSet(src1);SortSet(src2);
int i=0,len=LengthOf(src1);
src1=src1->next;
while(i<len)
{
i++;
if(!ExistElem(src2, src1->elem))
{
if(!ExistElem(dest, src1->elem))
{
AddElem(dest, src1->elem);
src1=src1->next;
}
}
else
{
src1=src1->next;
}
}
}//SubSet

int ExistSubset(Set dest, Set src)
{
//子集判斷
int i=0,len=LengthOf(src);
src=src->next;
while(i<len)
{
if(!ExistElem(dest, src->elem))
return 0;
i++;
src=src->next;
}
return 1;
}//ExistSubset

void NegSet(Set dest, Set src)
{
//求補集
SortSet(src);
int i=0;
while(i<26)
{
if(!ExistElem(src, i+97))
AddElem(dest, i+97);
i++;
}
}//NegSet

Ⅶ 有沒有誰做過數據結構課程設計,題目為:

題目1 馬踏棋盤問題
#include "stdio.h"
#define M 70
#define FALSE 0
#define TRUE 1
typedef struct node
{
int vec,x,y;
struct node *link;
}listnode;

#define MAXSIZE 70
typedef struct
{
int stack[MAXSIZE];
int top;
}seqstack;
seqstack *s;
void setnull(seqstack *s)
{
s->top=-1;
}
int push(seqstack *s,int x)
{
if(s->top>=MAXSIZE-1)
{
printf("stack overflow!\n");
return FALSE;
}
else
{
s->stack[++s->top]=x;/*棧頂指針上移,數據元素入棧*/
return TRUE;
}
}

int pop(seqstack *s)/*出當前棧s的棧頂元素*/
{ int p;
if(s->top<0)
{
printf("stack empty!\n");/* 棧空,返回空值*/
return NULL;
}
else
{
s->top--;
return(s->stack[s->top+1]);
}/*由於return語句的特點,必須先使 top減1,然後再執行return語句。而此時棧頂元素的表示應該為s->top+1*/
}

void creatlist(listnode ag[])
{
listnode *p;
int i,j,x,y,x1,x2,y1,y2,k;
k=1;

for(i=1;i<=8;i++)
{
for(j=1;j<=8;j++)
{
ag[k].x=i;
ag[k].y=j;
ag[k].vec=8*ag[k].x+ag[k].y-8;
ag[k].link=NULL;
printf("%d(%d,%d)",ag[k].vec,ag[k].x,ag[k].y);
k++;
}
printf("\n");
}
for(i=1;i<=64;i++)
{
/*printf("*%d*",i); */
setnull(s);
x1=ag[i].x;
y1=ag[i].y;
if((x1+1>0)&&(y1+2>0)&&(x1+1<=8)&&(y1+2<=8))
{
x2=x1+1;
y2=y1+2;
j=8*x2+y2-8;
/*printf("%d ",j);*/
push(s,j);

}
if((x1+1>0)&&(y1-2>0)&&(x1+1<=8)&&(y1-2<=8))
{
x2=x1+1;
y2=y1-2;
j=8*x2+y2-8;
/*printf("%d ",j);*/
push(s,j);
}

if((x1-1>0)&&(y1+2>0)&&(x1-1<=8)&&(y1+2<=8))
{
x2=x1-1;
y2=y1+2;
j=8*x2+y2-8;
/*printf("%d ",j);*/
push(s,j);
}
if((x1-1>0)&&(y1-2>0)&&(x1-1<=8)&&(y1-2<=8))
{
x2=x1-1;
y2=y1-2;
j=8*x2+y2-8;
/*printf("%d ",j);*/
push(s,j);
}
if((x1+2>0)&&(y1-1>0)&&(x1+2<=8)&&(y1-1<=8))
{
x2=x1+2;
y2=y1-1;
j=8*x2+y2-8;
/*printf("%d ",j);*/
push(s,j);
}
if((x1+2>0)&&(y1+1>0)&&(x1+2<=8)&&(y1+1<=8))
{
x2=x1+2;
y2=y1+1;
j=8*x2+y2-8;
/*printf("%d ",j);*/
push(s,j);
}
if((x1-2>0)&&(y1+1>0)&&(x1-2<=8)&&(y1+1<=8))
{
x2=x1-2;
y2=y1+1;
j=8*x2+y2-8;
/*printf("%d ",j);*/
push(s,j);
}
if((x1-2>0)&&(y1-1>0)&&(x1-2<=8)&&(y1-1<=8))
{
x2=x1-2;
y2=y1-1;
j=8*x2+y2-8;
/*printf("%d ",j);*/
push(s,j);
}
do
{
j=pop(s);
x2=ag[j].x;
y2=ag[j].y;
p=(listnode *)malloc(sizeof(listnode));
p->vec=j;
p->x=x2;
p->y=y2;
p->link=ag[i].link;
ag[i].link=p;
/*printf(" %d(%d,%d) ",p->vec,p->x,p->y);*/
p=(listnode *)malloc(sizeof(listnode));
p->vec=i;
p->x=x1;
p->y=y1;
p->link=ag[j].link;
ag[j].link=p;
/*printf(" %d(%d,%d) ",p->vec,p->x,p->y);*/

} while(s->top>=0);

}

}

void dfs(listnode ag[],int v,int flag[])
{
listnode *p;
int i;
flag[v]=1;
printf("(%d,%d)",ag[v].x,ag[v].y);
p=ag[v].link;
while(p!=NULL)
{
i=p->vec;
if(flag[i]==0)
dfs(ag,i,flag);
p=p->link;
}

}
/*void blt(listnode ag[M],int n)
{
int i;
int flag[M];
for(i=1;i<=n;i++)
flag[i]=0;
for(i=1;i<=n;i++)
if(flag[i]==0)
dfs(ag,i,flag);
}*/
void main()
{
listnode ag[M];
int flag[M];
creatlist(ag);
dfs(ag,28,flag);
}

熱點內容
武漢大學學生會輔導員寄語 發布:2021-03-16 21:44:16 瀏覽:612
七年級學生作文輔導學案 發布:2021-03-16 21:42:09 瀏覽:1
不屑弟高考成績 發布:2021-03-16 21:40:59 瀏覽:754
大學畢業證會有成績單 發布:2021-03-16 21:40:07 瀏覽:756
2017信陽學院輔導員招聘名單 發布:2021-03-16 21:40:02 瀏覽:800
查詢重慶2018中考成績查詢 發布:2021-03-16 21:39:58 瀏覽:21
結業考試成績怎麼查詢 發布:2021-03-16 21:28:40 瀏覽:679
14中醫醫師資格筆試考試成績查分 發布:2021-03-16 21:28:39 瀏覽:655
名著賞析課程標准 發布:2021-03-16 21:27:57 瀏覽:881
北京大學商業領袖高端培訓課程 發布:2021-03-16 21:27:41 瀏覽:919