第二次在機房上機實驗《資料結構與算法》,盡管學的還是“皮毛”,但是能夠寫出來運作基本正确的程式還是比較興奮的。
理論的研究和學習最終還是應該服務于實踐的,也隻要實踐過才能夠檢驗理論的正确!第一次通過學習算法來實作一些數組類:順序表的建立、插入、删除、查找等
code:
#include"iostream"
//#include"stdlib.h"
using namespace std;
typedef struct
{
int *p;
int length;
int size;
}SqList;
int intial(SqList &L)
{
L.p=(int *)malloc(10*sizeof(int));
if(!L.p)
return 0;
else
{
L.length=10;
L.size=10;
cout<<"請輸入順序表中的所有元素(10個):"<<endl;
for(int i=0;i<10;i++)
{
cin>>L.p[i];
}
cout<<"你所建立的順序表是:"<<endl;
for(int k=0;k<10;k++)
{
cout<<L.p[k]<<" ";
}
}
return 1;
}
int Insert(SqList &L,int i,int e)
{
if(i<1||i>L.length+1)
return 0;
if(L.length>=L.size)
{
int * newbase=(int *)realloc(L.p,(L.size+1)*sizeof(int));
if(!newbase)
return 0;
L.p = newbase;
L.size+=1;
}
int *q = &(L.p[i-1]);
for(int *pt=&(L.p[L.size-1]);pt>=q;pt--)
*(pt+1) = *pt;
*q = e;
L.length=L.length+1;
return 1;
}
int Delete(SqList &L,int i,int &e)
{
if(i<1||i>L.length)
return 0;
int *p = &(L.p[i-1]);
e= *p;
int *q= &L.p[L.length-1];
for(p++;p<=q;p++)
*(p-1)=*p;
L.length=L.length-1;
return 1;
}
int search(SqList L,int i)
{
//if(i<1||i>L.length)
// return 0;
for(int k=0;k<L.length;k++)
if(L.p[k]==i)
{
cout<<L.p[k];
cout<<"您所查找的數是在順序表的第 "<<k+1<<"個位置"<<endl;
return 1; break;
}
cout<<"您所查找的數字不存在順序表中!!!"<<endl;
return 1;
}
int main()
{
int temp,m,n,g,s;
SqList L;
intial(L);
cout<<"原始的順序表是:"<<endl;
for(int i=0;i<10;i++)
cout<<L.p[i]<<" ";
cout<<endl;
cout<<"請輸入你所想插入的位置(1~10):"<<endl;
cin>>m;
cout<<"請輸入你所插入的一個整數:"<<endl;
cin>>n;
Insert(L,m,n);
cout<<"插入元素後的順序表是:"<<endl;
for(int j=0;j<11;j++)
cout<<L.p[j]<<" ";
cout<<endl;
cout<<"請輸入你所想删除的位置:"<<endl;
cin>>g;
Delete(L, g,temp);
cout<<"删除順序表一個元素之後為:"<<endl;
for(int k=0;k<10;k++)
cout<<L.p[k]<<" ";
cout<<endl<<"請輸入一個您查找的值:";
cin>>s;
search( L, s);
return 0;
}//這個程式還是有很多的漏洞的,需要優化改正
感覺到算法的力量,資料結構的重要性!學習中…………
2011年9月21日 13:02:23星期三