#include <iostream>
#include "stdio.h"
using namespace std;
#define maxsize 50
#define elemtype int
typedef struct
{
int data[maxsize];
int length;
}SqList;
typedef struct lnode
{
elemtype data;
struct lnode *next;
}lnode,*linklist;
class List
{
public:
void sqlist_print(SqList SL); //顺序表打印
bool sqlist_listInsert(SqList &SL,int i,elemtype e); //顺序表插入结点
bool sqlist_listDelete(SqList &SL,int i); //顺序表删除结点
int sqlist_locateElem(SqList SL,elemtype e); //按值查找
void linklist_print(linklist L); //单链表打印
linklist linklist_insert_head(linklist &L); //单链表头插法
linklist linklist_insert_tail(linklist &L); //单链表尾插法
linklist linklist_findelem(linklist L,elemtype e); //单链表按值查找
linklist linklist_insert(linklist &L,elemtype x,elemtype e); //单链表在x后面插入e
linklist linklist_del_node(linklist &L,elemtype e); //单链表删除e
};
/*****************************顺序表***********************************/
void List::sqlist_print(SqList SL)
{
for(int i=0;i<SL.length;i++)
cout<<SL.data[i];
cout<<endl;
}
//插入操作
bool List::sqlist_listInsert(SqList &SL,int i,elemtype e)
{
if(i<1||i>SL.length+1)
return false;
if(SL.length>=maxsize)
return false;
for(int j=SL.length;j>=i;j--)
SL.data[j]=SL.data[j-1];
SL.data[i-1]=e;
SL.length++;
return true;
}
//删除操作
bool List::sqlist_listDelete(SqList &SL,int i)
{
if(i<1||i>SL.length)
return false;
for(int j=i;j<SL.length;j++)
SL.data[j-1]=SL.data[j];
SL.length--;
return true;
}
//顺序查找
int List::sqlist_locateElem(SqList SL,elemtype e)
{
for(int i=0;i<SL.length;i++)
{
if(SL.data[i]==e)
return i+1;
}
return 0;
}
/*****************************单链表***********************************/
void List::linklist_print(linklist L)
{
L=L->next;
while(L!=nullptr)
{
cout<<L->data<<" ";
L=L->next;
}
cout<<endl;
}
//头插法建立链表
linklist List::linklist_insert_head(linklist &L)
{
lnode *s;
int x;
L=new lnode; //头节点
L->next=nullptr;
while(cin>>x)
{
if(x==9999)
break;
s=new lnode;
s->data=x;
s->next=L->next;
L->next=s;
}
return L;
}
//尾插法建立链表
linklist List::linklist_insert_tail(linklist &L)
{
lnode *s,*r;
int x;
L=new lnode; //头节点
r=L; //r为表尾指针
while(cin>>x)
{
if(x==9999)
break;
s=new lnode;
s->data=x;
r->next=s;
r=s;
}
r->next=nullptr;
}
//按值查找
linklist List::linklist_findelem(linklist L,elemtype e)
{
lnode *p;
p=L->next;
while(p!=nullptr&&p->data!=e)
p=p->next;
return p;
}
//结点插入
linklist List::linklist_insert(linklist &L,elemtype x,elemtype e)//在x后面插入e
{
lnode *p=L->next;
while(p!=nullptr&&p->data!=x)
p=p->next;
lnode *s=new lnode;
s->data=e;
s->next=p->next;
p->next=s;
return L;
}
//结点删除
linklist List::linklist_del_node(linklist &L,elemtype e)//删除元素e
{
lnode *pre=L;
while(pre->next!=nullptr&&pre->next->data!=e)
pre=pre->next;
lnode *p=pre->next;
pre->next=p->next;
free(p);
return L;
}
数据结构之链表
于 2022-08-16 23:18:27 首次发布