data[j]<<” ";
}
二、单链表的操作
(1)创建一个带头结点的单链表;
(2)插入元素操作:
将新元素x插入到单链表中第i个元素之后;
(3)删除元素操作:
删除单链表中值为x的元素;
#include<iostream。
h>
#include<stdlib.h>
typedef structLNode
{
ﻩintdata;
ﻩstructLNode*next;
}LNode;
//创建一个带头结点的长度长度长度为n的链表L;
voidcreatelist(LNode *&L,intn)
{
inti;
ﻩLNode*p;
ﻩL=(LNode*)malloc(sizeof(LNode));
L->next=NULL;
ﻩfor(i=1;i〈=n;i++)
{
ﻩﻩp=(LNode*)malloc(sizeof(LNode));
ﻩcout〈<”请输入链表第”〈
ﻩcin〉〉p->data;
ﻩﻩp-〉next=L—>next;
L—〉next=p;
ﻩ}
}
//插入元素操作:
将新元素x插入到单链表L中第i个元素之后
void insert(LNode*&L,int i,int x)
{
intj=0;
ﻩLNode*p,*q;
ﻩp=L;
while(p->next!
=NULL)
{
j++;
ﻩif(j==i)
ﻩ{
ﻩq=(LNode *)malloc(sizeof(LNode));//找到位置
ﻩﻩq—〉data=x;//放入数据
q->next=p-〉next;
ﻩﻩp-〉next=q;
ﻩﻩbreak;
}
p=p—>next;
}
ﻩif(p->next==NULL)
ﻩ{
ﻩﻩq=(LNode *)malloc(sizeof(LNode));//找到位置
ﻩﻩq-〉data=x;//放入数据
ﻩq->next=p-〉next;
ﻩﻩﻩp—〉next=q;
}
}
//删除元素操作:
删除单链表中值为x的元素;
voiddeleted(LNode*&L,intx)ﻩ
{
ﻩLNode*p,*q;
p=L;
ﻩwhile(p—>next!
=NULL)
{
ﻩif(p->next-〉data==x)
{
ﻩq=p->next;ﻩ
ﻩp->next=p->next—>next;
free(q);
ﻩﻩ}
p=p->next;
ﻩ}
}
void print(LNode*&L)
{
LNode *p;
ﻩp=L->next;
ﻩwhile(p!
=NULL)
{
ﻩﻩcout<ﻩp=p->next;
ﻩ}
}
voidmain()
{
LNode *L,*p;//节点为L
inti,x,y,s,n;//i插入位置,X插入元素,y为删除元素,n表长
cout<〈"输入表长 n:
";
ﻩcin〉>n;
ﻩcreatelist(L,n);
ﻩcout〈<”输出插入之前:
";
print(L);
cout<〈”请输入插入的位置i:
";
ﻩcin〉>i;
ﻩcout<〈"请输入插入的元素x:
";
cin>〉x;
ﻩinsert(L,i,x);
cout〈〈"输出插入后:
”;
print(L);
cout<〈”请输入删除的元素y:
";
ﻩcin〉>y;
deleted(L,y);//删除元素操作:
删除单链表中值为y的元素;
cout<<”输出删除后:
”;
ﻩprint(L);
}
三、在顺序栈上实现将非负十进制数转换成二进制数
#include〈iostream.h>
#include
h〉
#define MAX 100
//在顺序栈上实现将非负十进制数x转换成二进制数
void conversion(int &x)
{
ﻩintstack[MAX];
ﻩint top=—1;
ﻩintt;
ﻩwhile(x)
ﻩ{
stack[++top]=x%2;
ﻩﻩx=x/2;
ﻩ}
while(top!
=-1)
{
ﻩt=stack[top-—];
ﻩcout〈〈t;
ﻩ}
}
voidmain()
{
ﻩint x,t;
ﻩcout<<”请输入你要转换的非负十进制数x:
”〈<endl;
cin〉>x;
ﻩcout<〈”输出转换后的二进制数:
”;
ﻩconversion(x);
cout〈<endl;
}
四、在顺序表中采用顺序查找算法和折半查找算法寻找关键字X在顺序表中的位置.
#include〈iostream.h〉
#include
#defineMAX100
//在顺序表中采用顺序查找算法和折半查找算法寻找关键字X在顺序表中的位置
typedefstruct
{
ﻩint data[MAX];
intlength;
}sqlist;
void init(sqlist&a)//线性表初始化
{
a.length=0;
}
voidinsert(sqlist&a,inti,int x)//插入元素操作
{
intj;
if(i〈0||i>a。
length+1||a.length==100)
;
ﻩelse{
ﻩfor(j=a.length+1;j>i;j-—)
ﻩa.data[j]=a.data[j-1];
a.data[j]=x;
ﻩa.length++;
ﻩ}
}
intsearch(sqlist &sq,int x)//顺序查找算法
{
int i;
for(i=0;ilength;i++)//顺序表存储从0开始
ﻩif(sq。
data[i]==x)
ﻩﻩreturn i;
}
inthsearch(sqlist&sq,int low,inthigh,intx)//折半查找算法
{
ﻩintmid;
ﻩwhile(low〈=high)
ﻩ{
ﻩﻩmid=(low+high)/2;
ﻩﻩif(sq。
data[mid]==x)
return mid;
ﻩelse if(sq。
data[mid]>x)
ﻩﻩhigh=mid-1;
ﻩelseif(sq。
data[mid]<x)
ﻩlow=mid+1;
ﻩ}
}
void main()
{
sqlistsq;//线性表为sq
inti,e,x,y,n;//i插入位置,x,y要查找元素,n表长
init(sq);//构造一个空表
cout〈<"输入表长 n:
”;
cin>>n;
cout<〈”输入表长为"< ";
for(i=0;i{
ﻩcin>>e;
insert(sq,i,e);
}
cout<<"查找前(便于判断):
”<<endl;
for(i=0;i〈sq.length;i++)
ﻩcout〈〈sq。
data[i]〈<” ”;
cout<<endl;
cout〈<”采用顺序查找算法:
"<<endl;
cout<cout<<”输入要查找元素关键字x";
ﻩcin〉〉x;
cout〈〈endl;
cout〈〈”关键字"〈cout<〈"采用折半查找算法:
"〈<endl;
cout<〈endl;
cout<〈"输入要查找元素关键字y ";
cin>〉y;
cout〈<endl;
cout<〈”关键字"<〈y<〈"在顺序表中的位置为"〈〈hsearch(sq,1,sq.length,y)+1<〈endl;
}
五、将无序数列使用直接插入排序算法和快速排序算法将其排成递增有序数列。
#include<iostream.h>
#include
#defineMAX 100
//将无序数列使用直接插入排序算法和快速排序算法将其排成递增有序数列
typedefstruct
{
intdata[MAX];
ﻩintlength;
}sqlist;
voidinit(sqlist&a)//线性表初始化
{
a.length=0;
}
voidinsert(sqlist &a,inti,intx)// 插入元素,构造无序数列
{
intj;
if(i〈0||i〉a.length+1||a.length==100)
ﻩ;
else{
ﻩfor(j=a。
length+1;j>i;j--)
ﻩﻩa。
data[j]=a。
data[j—1];
ﻩa。
data[j]=x;
ﻩa.length++;
ﻩ}
}
//将哨兵放在a.data[n]中,被排序的记录放在a.data[0。
.n-1]中,直接插入排序算法。
voidinsertsort(sqlist &a)//直接插入排序算法
{
inti,j;
ﻩint n=a。
length;
ﻩfor(i=n-2;i〉=0;i--)
ﻩif(a.data[i]〉a.data[i+1])
ﻩ{
ﻩﻩa.data[n]=a.data[i];//a.data[n]是哨兵
j=i+1;
ﻩﻩﻩdo{
ﻩﻩa.data[j—1]=a.data[j];
ﻩﻩj++;
ﻩ}while(a.data[j]data[n]);
ﻩa.data[j-1]=a。
data[n];
}
}
intPartition(sqlist &a,inti,intj)
{
ﻩintpivot=a。
data[i];
ﻩwhile(i〈j)
ﻩ{
ﻩﻩwhile(i<j&&a.data[j]>=pivot)
ﻩﻩﻩj-—;
if(i a.data[i++]=a.data[j];
while(idata[i]<=pivot)
i++;
if(i<j)
a.data[j——]=a.data[i];
}
a.data[i]=pivot;
ﻩreturni;
}
voidQuickSort(sqlist&a,intlow,inthigh)//快速排序
{
int pivotpos;//划分后的基准记录的位置
ﻩif(low〈high)
ﻩ{//仅当区间长度大于1时才须排序
pivotpos=Partition(a,low,high);
QuickSort(a,low,pivotpos-1);
QuickSort(a,pivotpos+1,high);
ﻩ}
}
voidmain()
{
sqlist sq1,sq2;//线性表为sq1,sq2
int i,e,x,n1,n2;//n表长
init(sq1);//构造一个空表
cout〈<”输入表长n1:
";
cin>〉n1;
cout〈<"输入表长为"<〈n1〈<"个数:
”;
for(i=0;i〈n1;i++)
{
ﻩcin〉〉e;
ﻩinsert(sq1,i,e);//插入元素,构造无序数列
}
cout<<"无序数列为:
"<〈endl;
for(i=0;i〈sq1.length;i++)
cout<data[i]〈<"";
cout<〈endl;
insertsort(sq1);
cout〈<"直接插入排序后数列为:
”〈<endl;
for(i=0;i〈sq1.length;i++)
ﻩcout〈<sq1.data[i]<<”";
cout<〈endl;
cout〈cout〈〈endl;
init(sq2);//构造一个空表
cout<<"输入表长n2:
";
cin〉>n2;
cout〈〈”输入表长为”<";
for(i=0;i〈n2;i++)
{
ﻩcin>>e;
ﻩ insert(sq2,i,e);//插入元素,构造无序数列
}
cout<<"无序数列为:
"<for(i=0;i<sq2。
length ;i++)
cout<data[i]〈〈"”;
cout<〈endl;
QuickSort(sq2,0,n2-1);
cout<〈"快速排序后数列为:
"<for(i=0;i<sq2.length;i++)
ﻩcout〈cout<}