1、顺序表逆序
// 408.xxb_tigao.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
//
#include <iostream>
using namespace std;
#define eletype char
#define maxelem 50
typedef struct LNode {
eletype A[50];
unsigned length;
}LNode,*LLNode;
void initList(LLNode L) {
L->length = 0;
for (int i = 0; i < 10; i++) {
L->A[i] = i + 97;
L->length++;
}
}
void reverse(LLNode L) {
for (int i = 0; i < L->length / 2; i++) {
int t = L->A[i];
L->A[i] = L->A[L->length - i - 1];
L->A[L->length - i - 1] = t;
}
}
void printlist(LLNode L) {
for (int i = 0; i < L->length; i++) {
cout << L->A[i] << " ";
}
cout << endl;
}
int main()
{
LLNode L = new LNode;
initList(L);
printlist(L);
reverse(L);
printlist(L);
return 0;
}
2、顺序表划分:以第一个元素为数轴,小于等于数轴的放在左边,大于数轴的放在右边
方法一:
// 408.xxb_tigao.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
//
#include <iostream>
using namespace std;
#define eletype int
#define maxelem 50
typedef struct LNode {
eletype A[9] = {5,1,2,6,4,7,3,9,8};
unsigned length=sizeof(A)/sizeof(A[0]);
}LNode,*LLNode;
void printlist(LLNode L) {
for (int i = 0; i < L->length; i++) {
cout << L->A[i] << " ";
}
cout << endl;
}
void qufen(LLNode L) {
int B[maxelem];
int jl = 0;
int jr = L->length - 1;
for (int i=1; i < L->length; i++) {
if (L->A[i] < L->A[0]) {
B[jl] = L->A[i];
jl++;
}
else {
B[jr] = L->A[i];
jr--;
}
}
B[jl] = L->A[0];
for (int i = 0; i < L->length; i++) {
L->A[i] = B[i];
}
}
int main()
{
LLNode L = new LNode;
printlist(L);
qufen(L);
printlist(L);
return 0;
}
方法二:(快速排序思想)
#include<iostream>
using namespace std;
#define eletype int
#define max 50
void printList(int A[],int n) {
for (int i = 0; i < n; i++) {
cout << A[i] << " ";
}
cout << endl;
}
void partArr(int A[],int n) {
eletype num = A[0];
int i = 0; int j = n - 1;
while (i < j) {
while (i < j && A[j] > num)
j--;
if (i < j)
A[i++] = A[j];
while (i < j && A[i] <= num)
i++;
if (i < j)
A[j--] = A[i];
}
A[i] = num;
}
int main() {
int A[] = { 4,1,4,2,6,2,7,2,8,10 };
int n = sizeof(A) / sizeof(A[0]);
printList(A, n);
partArr(A, n);
printList(A, n);
return 0;
}
3、顺序表合并:将两个升序数组合并为一个升序数组
// 408.xxb_tigao.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
//
#include <iostream>
using namespace std;
#define eletype int
#define maxelem 50
typedef struct LNode {
eletype A[maxelem];
unsigned length=0;
}LNode,*LLNode;
void printlist(LLNode L) {
for (int i = 0; i < L->length; i++) {
cout << L->A[i] << " ";
}
cout << endl;
}
void initList(LLNode L,int n) {
if (n == 0) {
for (int i = 0; i < 10; i++) {
L->A[i] = 2*i;
L->length++;
}
}
if (n == 1) {
for (int i = 0; i < 10; i++) {
L->A[i] = 2 * i + 1;
L->length++;
}
}
}
void mergelist(LLNode L,LLNode S) {
LLNode Q = new LNode;
int i = 0;
int j = 0;
int r = 0;
while (i<L->length && j<S->length) {
if (L->A[i] < S->A[j]) {
Q->A[r++] = L->A[i++];
Q->length++;
}
else {
Q->A[r++] = S->A[j++];
Q->length++;
}
}
while (i<L->length) {
Q->A[r++] = L->A[i++];
Q->length++;
}
while (j<L->length)
{
Q->A[r++] = S->A[j++];
Q->length++;
}
printlist(Q);
}
int main()
{
LLNode L = new LNode;
LLNode S = new LNode;
initList(L, 0);
initList(S, 1);
printlist(L);
printlist(S);
mergelist(S, L);
return 0;
}
4、链表逆序
方法一:
// 408.lb.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
//
#include <iostream>
using namespace std;
#define eletype char
typedef struct LNode {
eletype data;
struct LNode* next;
}LNode,*LinkList;
void InitLinkList(LinkList head) {
head->data = 0;
for (int i = 0; i < 10; i++) {
LinkList P = new LNode;
P->data = i + 97;
P->next = head->next;
head->next = P;
head->data++;
}
}
void PrintLinkList(LinkList head) {
LinkList p=head->next;
while (p) {
cout << p->data << " ";
p = p->next;
}
cout << endl;
}
void reverse(LinkList head) {
LinkList r = head->next;
while (r->next != NULL) {
r = r->next;
}
for (int i = 0; i < head->data-1; i++) {
LinkList q = head->next;
head->next = head->next->next;
q->next = r->next;
r->next = q;
}
}
int main()
{
LinkList L = new LNode;
L->next = NULL;
InitLinkList(L);
PrintLinkList(L);
reverse(L);
PrintLinkList(L);
return 0;
}
方法二:(头插法思想)
// 408.lb.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
//
#include <iostream>
using namespace std;
#define eletype char
typedef struct LNode {
eletype data;
struct LNode* next;
}LNode, * LinkList;
void InitLinkList(LinkList head) {
head->data = 0;
for (int i = 0; i < 10; i++) {
LinkList P = new LNode;
P->data = i + 97;
P->next = head->next;
head->next = P;
head->data++;
}
}
void PrintLinkList(LinkList head) {
LinkList p = head->next;
while (p) {
cout << p->data << " ";
p = p->next;
}
cout << endl;
}
void reverse(LinkList head) {
LinkList r = head->next;
LinkList t = head->next;
head->next = NULL;
while (r) {
r = r->next;
t->next = head->next;
head->next = t;
t = r;
}
}
int main()
{
LinkList L = new LNode;
L->next = NULL;
InitLinkList(L);
PrintLinkList(L);
reverse(L);
PrintLinkList(L);
return 0;
}