PTA数据结构 6-1 单链表逆转 6-2 顺序表操作集

6-1 单链表逆转
题目要求:
本题要求实现一个函数,将给定的单链表逆转。
代码如下:

List Reverse(List head){
	List *p,*pre;
	p=NULL;
	while(head!=NULL){
		pre=head->Next;
		head->Next=p;
		p=head;
		head=pre;
	} 
	return p;
} 

本题思路:
1、本题使用三个指针就地逆置单链表,三个指针开火车一样从左到右行驶,pre指向head的下一项,用head指向p来将单链表逆置,直到head走到NULL,即原单链表表尾。
2、PTA平台对指针的声明好像并不严格,p和pre可以直接声明,或者用*p,pre都行。

6-2 顺序表操作集
题目要求:
本题要求实现顺序表的操作集
List MakeEmpty():创建并返回一个空的线性表;

Position Find( List L, ElementType X ):返回线性表中X的位置。若找不到则返回ERROR;

bool Insert( List L, ElementType X, Position P ):将X插入在位置P并返回true。若空间已满,则打印“FULL”并返回false;如果参数P指向非法位置,则打印“ILLEGAL POSITION”并返回false;

bool Delete( List L, Position P ):将位置P的元素删除并返回true。若参数P指向非法位置,则打印“POSITION P EMPTY”(其中P是参数值)并返回false。
代码如下:

List MakeEmpty(){
	List L;
	L=(List)malloc(sizeof(struct LNode));
	L->Last=-1;  //不太理解为什么last置0; 
	return L;
} 
Position Find( List L, ElementType X ){
    int i;
    for(i=0;i<=L->Last;i++){
    	if(X==L->Data[i]){
    		return i;
    	}
    }
    return ERROR;
} 
bool Insert( List L, ElementType X, Position P ){
	if(L->Last==MAXSIZE-1){
		printf("FULL");
		return false;
	}
	if(P<0||P>L->Last+1){
		printf("ILLEGAL POSITION");
		return false;
	}
	int i;
	for(i=L->Last+1;i>P;i--){
		L->Data[i]=L->Data[i-1];
	}
	L->Data[i]=X;
	L->Last++;
	return true;
}
bool Delete( List L, Position P ){
	int i;
	if(P<0||P>L->Last){
		printf("POSITION %d EMPTY",P);
		return false;
	}
	for(i=P;i<L->Last;i++){
		L->Data[i]=L->Data[i+1];
	}
	L->Last--;
	return true;
}

本题思路:
1、太久没看数据结构有些生疏,注意要求:顺序表!
2、其实就是很基本的几个函数,目前置空有些不懂。
3、插入算法:看last在哪里,如果是MAXSIZE-1则说明满了,另一限定条件题目要求的也很明白。之后是插入,要先从末尾一换一,右移出一个位置之后插入,Last在里边与length功能类似。
4、删除操作注意看好输出要求。并且删除操作要在Last的前一项停止,对应所有项要统统左移一个单位,这才有for(i=P;i<L->Last;i++)
5、PTA不支持顺序表写成L.Data的形式,只能写成L->data形式。
6、

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值