【数据结构】顺序表和链式表

【数据结构】顺序表和链式表

顺序表:

#include<bits/stdc++.h>
using namespace std;
const int MAXSIZE = 1e6+7;
typedef int ElementType;
typedef struct LNode *List;
struct LNode {
	ElementType Data[MAXSIZE];
	int Last;//顺序表长度length=last+1
} ;
struct LNode L;
List PtrL;
List MakeEmpty();//初始化一个空线性表L;
int Find(ElementType X, List L );//在线性表L中查找X的第一次出现位置;
void Insert(ElementType X, int i, List L);//在位序i前插入一个新元素X;
void Delete(int i, List L );//删除指定位序i的元素;
void printL(List L);
int main() {
	PtrL = MakeEmpty();
	printL(PtrL);
	cout<<"请输入要查找的元素:";
	ElementType x;
	int ans;
	cin>>x;
	ans=Find(x ,PtrL );
	if(ans==-1)
		cout<<"未找到"<<endl;
	else
		cout<<"该元素在第"<<ans+1<<"个位置"<<endl;
	ElementType x2;
	int pos;
	cout<<"请输入要插入的元素:";
	cin>>x2;
	cout<<"请输入要插入的位置:";
	cin>>pos;
	Insert(x2, pos, PtrL);
	printL(PtrL);
	int pos2;
	cout<<"请输入要删除的位置:";
	cin>>pos2;
	Delete(pos2, PtrL);
	printL(PtrL);
	return 0;
}
List MakeEmpty() {
	List Ptrl;
	int length;
	Ptrl = (List )malloc(sizeof(struct LNode));
	Ptrl->Last=-1;
	printf("请输入表长:");
	cin>>length;
	for(int i = 0; i < length; i++) {
		printf("请输入第%d个元素:",i+1);
		cin>>Ptrl->Data[i];
		Ptrl->Last++;
	}
	return Ptrl;
}
int Find(ElementType X, List L ) {
	int index = 0;
	while(index <= PtrL->Last && PtrL->Data[index]!= X)
		index++;
	if(index > PtrL->Last)
		return -1;
	else
		return index;
	//找到了返回下标i,没找到返回-1;
}
void Insert(ElementType X, int i, List L) {
	if(PtrL->Last == MAXSIZE-1) {
		cout<<"表满"<<endl;
		return ;
	}
	if(i < 1 || i > PtrL->Last+2) {
		//插入位置在表首前或者在表末后两位
		cout<<"位置不合法"<<endl;
		return ;
	}
	for(int j = PtrL->Last ; j >= i-1 ; j--)
		PtrL->Data[j+1] = PtrL->Data[j];//倒序后移
	PtrL->Data[i-1] = X;//将X插入到位置i(下标i-1)
	PtrL->Last++;//长度+1,指向最后一个元素
	return ;
}
void Delete(int i, List L ) {
	if( i < 1 || i > PtrL->Last+1) {
		//删除位置在表外
		cout<<"不存在当前元素"<<endl;
		return ;
	}
	for(int j = i ; j <= PtrL->Last ; j++)
		PtrL->Data[j-1]=PtrL->Data[j];
	PtrL->Last--;
	return ;
}
void printL(List L) {
	printf("共有%d个元素:\n",L->Last+1);
	for(int i = 0; i<= L->Last ; i++)
		cout<<L->Data[i]<<" ";
	cout<<endl;
	return ;
}

链式表:

#include<bits/stdc++.h>
using namespace std;
typedef int ElementType;
typedef struct LNode *List;
struct LNode {
	ElementType Data;
	List Next;
};
List Head_PtrL;
List Tail_PtrL;
List Head_MakeEmpty();//前插法初始化一个线性表L;
List Tail_MakeEmpty();//后插法初始化一个线性表L;
void Head_printL( List L );
void Tail_printL( List L );
List FindKth( int K, List L );//根据位序K,返回相应元素 ;
List Find( ElementType X, List PtrL );//根据元素X,返回相应位置;
void Insert( ElementType X, int i, List L);//在位序i前插入一个新元素X;
void Delete( int i, List L );//删除指定位序i的元素;
int Length( List L );//返回线性表L的长度n。
int main() {

	//头插法
	Head_PtrL = Head_MakeEmpty();
	Head_printL( Head_PtrL );
	
	//尾插法
	Tail_PtrL = Tail_MakeEmpty();
	Tail_printL( Tail_PtrL );


	return 0;

}
List Head_MakeEmpty() {
	List p;
	p = (List )malloc(sizeof(struct LNode));
	p->Next = NULL;
	int length;
	cout<<"请输入表长:";
	cin>>length;
	List node;
	for(int i = 0; i < length; i++) {
		printf("请输入第%d个元素:",i+1);
		int x;
		cin>>x;
		node = (List )malloc(sizeof(struct LNode));
		node->Data = x;
		node->Next = p->Next;
		p->Next = node;
	}
	return p;
}
void Head_printL( List L ) {
	List a = L;
	while(a->Next) {
		cout<<a->Next->Data<<" ";
		a=a->Next;
	}
	cout<<endl;
	return ;
}
List Tail_MakeEmpty() {
	List p,temp;
	p = (List )malloc(sizeof(struct LNode));
	p->Next = NULL;
	temp = p;
	int length;
	cout<<"请输入表长:";
	cin>>length;
	List node;
	for(int i = 0; i < length; i++) {
		printf("请输入第%d个元素:",i+1);
		int x;
		cin>>x;
		node = (List )malloc(sizeof(struct LNode));
		node->Data = x;
		temp->Next = node;
		temp = node;
	}
	temp->Next = NULL;
	return p;
}
void Tail_printL( List L ) {
	List a = L;
	while(a->Next) {
		cout<<a->Next->Data<<" ";
		a=a->Next;
	}
	cout<<endl;
	return ;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值