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;
}