锐格————-线性表

8559

设有一个线性表存放在一个- -维数组中的前n个数组元素位置。请编写一个顺序表的程序,将这个线性表原地逆置。
输出逆置前的顺序表和逆置后的顺序表。

#include <bits/stdc++.h>

using namespace std;

#define Maxsize 1000
typedef struct
{
    int *data;
    int length;
}Sqlist;

int Initlist(Sqlist &L)
{
    L.data=new int[Maxsize];
    if(!L.data) cout<<"error"<<endl;
    L.length=0;
    return 1;

}
void IN(Sqlist &L,int n)
{
    for(int i=0;i<n;i++)
    {
        cin>>L.data[i];
        L.length++;
    }
}
void out1(Sqlist &L)
{
    for(int i=0;i<L.length-1;i++)
    {
        cout<<L.data[i]<<" ";
    }
    cout<<L.data[L.length-1]<<endl;
}
void out2(Sqlist &L)
{
    for(int i=L.length-1;i>0;i--)
    {
        cout<<L.data[i]<<" ";
    }
    cout<<L.data[0]<<endl;
}
int main()
{
    int n;
    cin>>n;
    Sqlist L;
    Initlist(L);
    IN(L,n);
    out1(L);
    out2(L);
    return 0;
}

8553

随机产生或键盘输入一组元素,建立一个带头结点的单向链表(无序),遍历单向链表,显示相应元素。

#include <bits/stdc++.h>

using namespace std;


typedef struct node
{
    int data;
    struct node *next;
}node,*linklist;

void putout(linklist l)
{
    linklist p=new node;
    p=l->next;
    while(p)
    {cout<<p->data<<" ";
    p=p->next;}

}



int main()
{

    linklist l=new node;
    l->next=NULL;
    int x;
    cin>>x;
    linklist r=new node;
      r=l;
    while(x)
    { linklist p=new node;
          p->data=x;
    p->next=NULL;
    r->next=p;r=p;
    cin>>x;
    }
   putout(l);


}

8554

试编写算法,把单向链表中元素逆置(不允许申请新的结点空间)

#include<bits/stdc++.h>
#define RESULT int
#define OK 1
#define ERROR 0
using namespace std;

typedef struct Node {

    int data;
	Node* next;

}LNode, * LinkList;

RESULT InitList(LinkList& L);									//初始化链表
RESULT InsertData_Back(LinkList& L, int data);					//尾插
RESULT Output_LinkList(LinkList& L);							//打印链表

int main() {

	LinkList L = new LNode;
	InitList(L);
	
	int num = 0;
	while (cin >> num) {
		LinkList p = L->next;
		while (num !=0) {
			InsertData_Back(L, num);		//输入
			cin >> num;
		}

		int n = 1;					//统计多少个元素
		p = L->next;
		while (p->next!=NULL) {
			p = p->next;
			n++;
		}
		
		LinkList back, back1, p1;	//设置工作指针
		p1 = L->next;
		p = L;

		for (int i = 0; i < n-1; i++) {		//查找尾结点
			while (p1->next != NULL) {
				p1 = p1->next;
			}

			back = p1;
			p1 = L;

			while (p1->next->next != NULL) {	//查找尾结点-1位置(因为不是双向链表很烦)
				p1 = p1->next;
			}
			back1 = p1;
	
			back->next = p->next;			//交换
			back1->next = NULL;
			p->next = back;
			p = p->next;

		}
		Output_LinkList(L);		//输出
		InitList(L);
		break;
	}

	return 0;
}

RESULT InitList(LinkList& L) {

	L = new LNode;
	L->next = NULL;

	return OK;
}

RESULT InsertData_Back(LinkList& L, int data) {

	LinkList temp = new LNode;
	temp->data = data;
	temp->next = NULL;
	LinkList p = L;
	while (p->next != NULL) {
		p = p->next;
	}
	p->next = temp;

	return OK;
}


RESULT Output_LinkList(LinkList& L) {

	LinkList temp = L->next;

	while (temp != NULL) {
		cout << temp->data << " ";
		temp = temp->next;
	}
	printf("\n");

	return OK;
}


8555

编写在非递减有序链表中插入一个元素使链表元素仍有序的函数,并利用该函数建立一个非递减有序单向链表。

#include<bits/stdc++.h>
#define RESULT int
#define OK 1
#define ERROR 0

using namespace std;

typedef struct Node {

    int data;

	Node* next;

}LNode, * LinkList;

RESULT InitList(LinkList& L);									//初始化链表
RESULT InsertData_Back(LinkList& L, int data);					//尾插
RESULT InsertData_Sort(LinkList& L, int data);					//查找插入
RESULT Output_LinkList(LinkList& L);							//打印链表

int main() {

	LinkList L = new LNode;
	InitList(L);

	int n = 0;

	while (cin >> n) {

		if (n != 0) {
			InsertData_Sort(L, n);
		}
		else {
			Output_LinkList(L);
			InitList(L);
			break;
		}

	}

	return 0;
}

RESULT InitList(LinkList& L) {

	L = new LNode;
	L->next = NULL;

	return OK;
}


RESULT InsertData_Back(LinkList& L, int data) {

	LinkList temp = new LNode;
	temp->data = data;
	temp->next = NULL;
	LinkList p = L;
	while (p->next != NULL) {
		p = p->next;
	}
	p->next = temp;

	return OK;
}

RESULT InsertData_Sort(LinkList& L, int data) {
	LinkList p = L;
	while (p->next != NULL && data > p->next->data) {
		p = p->next;
	}
	if (p->next == NULL) {
		InsertData_Back(L, data);
	}
	else {
		LinkList temp = new LNode;
		temp->data = data;
		temp->next = p->next;
		p->next = temp;
	}
	return 0;
}

RESULT Output_LinkList(LinkList& L) {

	LinkList temp = L->next;

	while (temp != NULL) {
		cout << temp->data << " ";
		temp = temp->next;
	}
	printf("\n");

	return OK;
}



8556

在这里插入图片描述

#include<bits/stdc++.h>
#define RESULT int
#define OK 1
#define ERROR 0

using namespace std;

typedef struct Node {

    int data;

	Node* next;

}LNode, * LinkList;

RESULT InitList(LinkList& L);									//初始化链表
RESULT InsertData_Back(LinkList& L, int data);					//尾插
RESULT InsertData_Sort(LinkList& L, int data);					//排序
RESULT Output_LinkList(LinkList& L);							//打印链表

int main() {

	LinkList L = new LNode;
	InitList(L);

	int n = 0;

	while (cin >> n) {
		while (n!=0) {
			InsertData_Back(L, n);
			cin >> n;
		}
		
		LinkList p = L;
		while (p->next->next!=NULL) {
			if (p->next->data % 2 == 0) {
				LinkList temp;
				temp = p->next;
				p->next = p->next->next;
				delete temp;
			}
			else {
				p = p->next;
			}
			
		}
		if (p->next->next == NULL) {
			if (p->next->data % 2 == 0) {
				LinkList temp;
				temp = p->next;
				p->next = p->next->next;
				delete temp;
			}
		}

		Output_LinkList(L);
	}


	return 0;
}

RESULT InitList(LinkList& L) {

	L = new LNode;
	L->next = NULL;

	return OK;
}


RESULT InsertData_Back(LinkList& L, int data) {

	LinkList temp = new LNode;
	temp->data = data;
	temp->next = NULL;
	LinkList p = L;
	while (p->next != NULL) {
		p = p->next;
	}
	p->next = temp;

	return OK;
}

RESULT InsertData_Sort(LinkList& L, int data) {
	LinkList p = L;
	while (p->next != NULL && data > p->next->data) {
		p = p->next;
	}
	if (p->next == NULL) {
		InsertData_Back(L, data);
	}
	else {
		LinkList temp = new LNode;
		temp->data = data;
		temp->next = p->next;
		p->next = temp;
	}
	return 0;
}


RESULT Output_LinkList(LinkList& L) {

	LinkList temp = L->next;

	while (temp != NULL) {
		cout << temp->data << " ";
		temp = temp->next;
	}
	printf("\n");

	return OK;
}




8557

在这里插入图片描述

#include<iostream>
#define RESULT int
#define OK 1
#define ERROR 0

using namespace std;

typedef struct Node {

    int data;

	Node* next;

}LNode, * LinkList;

RESULT InitList(LinkList& L);									//初始化链表
RESULT InsertData_Head(LinkList& L, int data);					//头插
RESULT InsertData_Back(LinkList& L, int data);					//尾插
RESULT InsertData_Middle(LinkList& L, int NO, int data);		//在NO位置插入元素
RESULT Output_LinkList(LinkList& L);							//打印链表
LinkList List_Combine(LinkList& L_1, LinkList& L_2);			//合并链表,仅原空间
void ListSort(LinkList& L);
void reverse(LinkList& L) {
	LinkList p;
	int n = 1;
	p = L->next;
	while (p->next != NULL) {
		p = p->next;
		n++;
	}

	LinkList back, back1, p1;
	p1 = L->next;
	p = L;

	for (int i = 0; i < n - 1; i++) {
		while (p1->next != NULL) {
			p1 = p1->next;
		}

		back = p1;
		p1 = L;

		while (p1->next->next != NULL) {
			p1 = p1->next;
		}
		back1 = p1;

		back->next = p->next;
		back1->next = NULL;
		p->next = back;
		p = p->next;

	}
}

int main() {

	//初始化链表L_1
	LinkList L_1;
	if (!InitList(L_1)) {
		return 0;
	}
	int n;
	cin >> n;
	while (n != 0) {
		InsertData_Back(L_1, n);
		cin >> n;
	}
	ListSort(L_1);

	//初始化链表L_2
	LinkList L_2;
	if (!InitList(L_2)) {
		return 0;
	}
	cin >> n;
	while (n != 0) {
		InsertData_Back(L_2, n);
		cin >> n;
	}
	ListSort(L_2);

	LinkList L_3 = new LNode;
	L_3 = List_Combine(L_1, L_2);
	reverse(L_3);
	Output_LinkList(L_3);


	//清除空间
	delete(L_1);
	delete(L_2);


	return 0;
}

RESULT InitList(LinkList& L) {

	L = new LNode;
	L->next = NULL;

	return OK;
}

RESULT InsertData_Head(LinkList& L, int data) {

	LinkList temp = new LNode;

	temp->data = data;
	temp->next = L;
	L = temp;

	return OK;
}

RESULT InsertData_Back(LinkList& L, int data) {

	LinkList temp = new LNode;
	temp->data = data;
	temp->next = NULL;
	LinkList p = L;
	while (p->next != NULL) {
		p = p->next;
	}
	p->next = temp;

	return OK;
}

RESULT InsertData_Middle(LinkList& L, int NO, int data) {

	LinkList temp = new LNode;
	temp->data = data;

	LinkList p = L;

	for (int i = 0; i < NO - 2; i++) {
		p = p->next;
	}

	temp->next = p->next;
	p->next = temp;

	return OK;
}

RESULT Output_LinkList(LinkList& L) {

	LinkList temp = L->next;

	while (temp != NULL) {
		cout << temp->data << " ";
		temp = temp->next;
	}


	return OK;
}

LinkList List_Combine(LinkList& L_1, LinkList& L_2) {

	//链表指针
	LinkList p_1 = L_1->next;
	LinkList p_2 = L_2->next;
	LinkList L_3 = new LNode;
	LinkList p = L_3;

	while (p_1 != NULL && p_2 != NULL) {

		/*if (p_1->data == p_2->data) {

			p->next = p_1;
			p = p_1;
			p_1 = p_1->next;
			p_2 = p_2->next;

		}*/

		if (p_1->data < p_2->data) {

			p->next = p_1;
			p = p_1;
			p_1 = p_1->next;

		}
		else {

			p->next = p_2;
			p = p_2;
			p_2 = p_2->next;

		}

	}

	if (p_1 == NULL && p_2 != NULL) {
		p->next = p_2;
	}
	if (p_2 == NULL && p_1 != NULL) {
		p->next = p_1;
	}

	return L_3;
}

void ListSort(LinkList &head) {
    LinkList  p,  q;
    for (p = head->next; p != NULL; p = p->next)
		for (q = p->next; q != NULL; q = q->next)
			if (p->data > q->data){
				int t1 = p->data; p->data = q->data; q->data = t1;    
		    }
}



8558

在这里插入图片描述

#include<bits/stdc++.h>
#define RESULT int
#define OK 1
#define ERROR 0

using namespace std;

typedef struct Node {

    int data;
	Node* front;
	Node* next;

}LNode, * LinkList;

RESULT InitList(LinkList& L);									//初始化链表
RESULT InsertData_Back(LinkList& L, int data);					//尾插
RESULT InsertData_Sort(LinkList& L, int data);					//尾插
RESULT Output_LinkList(LinkList& L);							//打印链表

int main() {

	LinkList l = new LNode;
	InitList(l);

	int n;
	cin >> n;
	int i = 0;
	while (n != 0) {
		InsertData_Back(l, n);
		cin >> n;
		i++;
	}

	LinkList s = new LNode;
	InitList(s);
	LinkList temp;
	LinkList sp = s;
	LinkList p = l->next;
	for (int j = 0; j < i && p != NULL; j++) {
		if (p->data % 2 == 0) {
			if (p->next == NULL) {
				p->front->next = NULL;
				sp->next = p;
				break;
			}
			p->front->next = p->next;	//取下节点
			p->next->front = p->front;
			sp->next = p;
			p->front = sp;
			temp = p->next;
			p->next = NULL;
			p = temp;
			sp = sp->next;

		}
		else {
			p = p->next;

		}
	}

	Output_LinkList(l);
	Output_LinkList(s);
	return 0;
}

RESULT InitList(LinkList& L) {

	L = new LNode;
	L->next = NULL;

	return OK;
}


RESULT InsertData_Back(LinkList& L, int data) {

	LinkList temp = new LNode;
	temp->data = data;
	temp->next = NULL;
	LinkList p = L;
	while (p->next != NULL) {
		p = p->next;
	}
	temp->front = p;
	p->next = temp;

	return OK;
}

RESULT InsertData_Sort(LinkList& L, int data) {
	LinkList p = L;
	while (p->next != NULL && data > p->next->data) {
		p = p->next;
	}
	if (p->next == NULL) {
		InsertData_Back(L, data);
	}
	else {
		LinkList temp = new LNode;
		temp->data = data;
		temp->next = p->next;
		p->next = temp;
	}
	return 0;
}


RESULT Output_LinkList(LinkList& L) {

	LinkList temp = L->next;

	while (temp != NULL) {
		cout << temp->data << " ";
		temp = temp->next;
	}
	printf("\n");

	return OK;
}



8560

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值