数据结构
只是为了记录我写的代码,质量不高
一、顺序表
#include<iostream>
#include<stdlib.h>
#include<string.h>
using namespace std;
typedef int ElemType;
struct List
{
ElemType *list;//存线性表元素的动态存储空间的指针
int size; //线性表长度
int Maxsize;//list数组长度
};
//初始化线性表
void InitList(List &L)
{
L.Maxsize=10;
//动态空间分配
L.list=new ElemType[L.Maxsize];
if(L.list==NULL)
{
cout<<"EXIT"<<endl;
exit(1);
}
//置线性表长度为0,空表
L.size=0;
}
//删除所有元素,使之为空表
void ClearList(List &L)
{
printf("yes\n");
if(L.list!=NULL)
{
delete []L.list;
L.list=NULL;
}
L.Maxsize=0;
L.size=0;
}
//得到线性表长度
void LengthList(List &L)
{
cout<<L.size<<endl;
}
//判表空
bool EmptyList(List &L)
{
return L.size==0;
}
//遍历线性表
void TraverseList(List &L)
{
for(int i=0;i<L.size;i++)
{
cout<<L.list[i]<<' ';
}
cout<<endl;
}
//按值查找元素
ElemType FindElem(List &L,ElemType item)
{
for(int i=0;i<L.size;i++)
{
if(L.list[i]==item)
{
cout<<i+1<<' '<<endl;
}
}
}
//按序号查找元素
ElemType GetElem(List &L,int i)
{
if(i<1 || i>L.size)
{
printf("out of range!");
}
cout<<"item is:"<<L.list[i-1]<<' '<<endl;
}
//更新给定值的元素
bool UpdateList(List &L,ElemType item)
{
for(int i=0;i<L.size;i++)
{
if(L.list[i]==item)
{
L.list[i]=item;
return true;
}
return false;
}
}
//按给定条件插入元素
void InsertList(List &L,ElemType item,int pos)
{
cout<<L.size<<"haha"<<endl;
//printf("yesss\n");
//按值有序插
int i;
if(pos==0)
{
for(i=0;i<L.size;i++)
{
if(item<L.list[i])//顺序
break;
}
pos=i+1;//保存新插元素的序号
}
else if(pos==-1)
pos=L.size+1;
if(L.size==L.Maxsize)
{
int k=sizeof(ElemType);
L.list=(ElemType*)realloc(L.list,2*k*L.Maxsize);
if(L.list==NULL)
printf("out of range!");
L.Maxsize=2*L.Maxsize;
}
//待插入位置及所有后续位置元素从后向前依次后移
//cout<<L.size<<"haha"<<endl;
for(i=L.size-1;i>=pos-1;i--)
L.list[i+1]=L.list[i];
L.list[pos-1]=item;
L.size++;
}
//删除给定条件的元素
void DeleteList(List &L,ElemType &item,int pos)
{
//printf("delete\n");
if(L.size==0)
{
printf("out of range\n");
}
if(pos<-1 || pos>L.size)
printf("pos out of range\n");
//求出按值删除时删除元素的位置,保存在pos中
int i;
if(pos==0)
{
for(i=0;i<L.size;i++)
{
if(item==L.list[i])
break;
}
if(i==L.size)
printf("no item");
pos=i+1;
}
else if(pos==-1)pos=L.size;
item=L.list[pos-1];
//待删除位置及所有后续位置元素从前向后依次前移
for(i=pos;i<L.size;i++)
L.list[i-1]=L.list[i];
L.size--;
}
//排序线性表
List SortList(List &L)
{
int i,j;
ElemType x;
for(i=1;i<L.size;i++)
{
x=L.list[i];
for (j=i-1;j>=0;j--)
{
if(x<L.list[j])
{
L.list[j+1]=L.list[j];
}
else break;
}
L.list[j+1]=x;
}
printf("sort\n");
}
int main()
{
int a[14]={
22,39,3,6,9,12,15,18,21,24,27,30,33,36};
int i;
ElemType x;
List L;
InitList(L);
printf("yes\n");
for(i=0;i<14;i++)
{
InsertList(L,a[i],i+1);
}
InsertList(L,48,13);
InsertList(L,40,0);
GetElem(L,4);
GetElem(L,9);
SortList(L);
TraverseList(L);
//根据值查元素
cout<<"type the find item:";
cin>>x;
FindElem(L,x);
//根据值删元素
cout<<"type will delete item:";
cin>>x;
DeleteList(L,x,5);
cout<<"after delete the List: ";
TraverseList(L);
//根据值插入元素
cout<<"type the insert item: ";
cin>>x;
InsertList(L,x,0);
cout<<"after insert the List: ";
TraverseList(L);
//求线性表长度
printf("the length is: ");
LengthList(L);
ClearList(L);
}
二、单链表
#include<iostream>
#include<stdlib.h>
#include<string.h>
using namespace std