#include<stdlib.h>
#define MAXSIZE 100
typedef struct{
int data[MAXSIZE]
int length
}SeqList
//初始化
SeqList InitList(){
SeqList L
L.length=0
return L
}
//插入元素
SeqList Insert(SeqList &L,int x){
if(L.length==MAXSIZE){
printf("表满")
exit(0)
}
L.length++
L.data[L.length]=x
return L
}
//删除第i个元素
SeqList Delete(SeqList &L,int i){
if(i<1||i>L.length){
printf("不存在第%d个元素",i)
exit(0)
}
int j
for(j=ij<=L.length-1j++){
L.data[j]=L.data[j+1]
}
L.length--
return L
}
//定位某个元素
int locate(SeqList L,int x){
int i
i=1
while(i<=L.length&&L.data[i]!=x){
i++
}
if(i<=L.length)
return i
else
return 0
}
SeqList Bingji(SeqList La,SeqList Lb,SeqList Lc){
int i,j
for(i=1i<=La.lengthi++){
for(j=1j<=La.lengthj++){
if(La.data[i]==Lb.data[j]){
Lc=Insert(Lc,La.data[i])
}
}
}
return Lc
}
//打印数组
void Display(SeqList L){
int i
for(i=1i<=L.lengthi++){
printf(" %d ",L.data[i])
}
printf("\n")
}
这个是基于数组的线性表,有插入和删除的 *** 作,如有不懂可追问。
Insert就是将一个新元素插入线性表,使得插入后的结果有序InsertFront就是将一个新元素插在线性表的最前面
InsertRear就是将一个新元素插在线性表的最后面
DeleteFront就是将线性表的最前面的元素删除
ClearList就是清空线性表
TraverseList就是将线性表从头到尾输出一遍
(1)InitList(La)
Int a[]={100,26,57,34,79}
For (i=0i<5i++) Insert(La,a[i])
分析:for进行了5次循环,线性表分别为:
100
26,100
26,57,100
26,34,57,100
26,34,57,79,100
(2)DeleteFront(La)
InsertRear(La, DeleteFront(La))
TraverseList(La)
分析:DeleteFront执行后线性表为:
34,57,79,100
InsertRear(La, DeleteFront(La))分两步执行,先执行DeleteFront,并将删除的元素作为新元素插入到线性表的最后,过程为:
57,79,100
57,79,100,34
(3)ClearList(La)
For (i=0i<5i++)
InsertFront(La,a[i])
分析:清空线性表,再将元素依次插入线性表的最前面:
空表
100
26,100
57,26,100
34,57,26,100
79,34,57,26,100
#include<iostream>using
namespace
std
struct
Linklist
{
int
data
Linklist
*next
}
Linklist
*L,*rear
void
create()//尾插法建立链表
{
Linklist
*p
int
x
cout<<"输入链表元素(按升序顺序输入):"
while(cin>>x&&x!=0)
{
if(L==NULL)
{
L=new
Linklist
L->data=x
rear=L
L->next=NULL
}
else
{
p=new
Linklist
p->data=x
rear->next=p
p->next=NULL
rear=p
}
}
rear->next=NULL
}
void
del(int
x)//删除data域值为x的结点
{
Linklist
*p,*k,*t
k=p=L
while(p!=NULL)
{
if(p->data==x)
break
k=p
p=p->next
}
if(p==L)
{
p=L
L=L->next
delete
p
}
else
if(p==rear)
{
k->next=NULL
delete
p
}
else
if(p==NULL)
{
cout<<"没有值为"<<x<<"的结点
"<<endl
}
else
{
k->next=p->next
delete
p
}
}
void
insert(int
x)//插入data域值为x的结点(默认原链表为升序排列)
{
Linklist
*s,*p,*k
s=new
Linklist
s->data=x
s->next=NULL
k=p=L
while(p!=NULL)
{
if(p->data>=x)
break
k=p
p=p->next
}
if(p==L)
{
L=s
s->next=p
}
else
if(p==NULL)
{
k->next=s
}
else
{
k->next=s
s->next=p
}
}
void
output()//将链表输出
{
Linklist
*p
p=L
cout<<"链表中的元素为:"
while(p!=NULL)
{
cout<<p->data<<"
"
p=p->next
}
cout<<endl<<endl
}
void
LinkListDemo()
{
//
L是无头结点的单链表
Linklist
*q,
*p,*t//p指针用于指示原链表最后的结点(即an),q指针用于指示原来的头结点(即a1)
q=L
if
(
q
&&
q->next
)
{
t=q//将q指针指向a1
L=L->next//将L指针指向新链表的头结点(即a2)
rear->next=q
q->next=NULL
t=NULL
}
}
void
main()
{
create()
output()
int
x
cout<<"输入需要插入的元素:"
cin>>x
insert(x)
output()
cout<<"输入需要删除的元素:"
cin>>x
del(x)
output()
LinkListDemo()
output()
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)