顺序表基本操作
int InitList_Sq(SqList& L)
{
L.elem = new ElemType[LIST_INIT_SIZE];
L.length = 0;
L.listsize = LIST_INIT_SIZE;
return OK;
}
int ListInsert_Sq(SqList& L, int i, int e)
{
if (i<1 || i>L.length + 1) return ERROR;
else if (L.length == LIST_INIT_SIZE) return ERROR;
else
{
for (int j = L.length - 1; j >= i - 1; j--)
{
L.elem[j + 1] = L.elem[j];
}
L.elem[i - 1] = e;
L.length++;
return OK;
}
}
int ListDelete_Sq(SqList& L, int i, int& e)
{
if (i<1 || i>L.length)
return ERROR;
e = L.elem[i - 1];
for (int j = i - 1; j <= L.length - 1; j++)
{
L.elem[j] = L.elem[j + 1];
}
L.length--;
return OK;
}
合并顺序表
#include <iostream>
using namespace std;
int a[100], b[100];
int ans[200];
int main()
{
int n1, n2;
cin >> n1;
for (int i = 0; i < n1; i++)
cin >> a[i];
cin >> n2;
for (int i = 0; i < n2; i++)
cin >> b[i];
int i = 0, j = 0;
int k = 0;
while (i < n1 && j < n2)
{
if (a[i] < b[j])
ans[k++] = a[i++];
else
ans[k++] = b[j++];
}
while (i < n1)
{
ans[k++] = a[i++];
}
while (j < n2)
{
ans[k++] = b[j++];
}
cout << "List A:";
for (int i = 0; i < n1; i++)
cout << a[i] << ' ';
cout << endl;
cout << "List B:";
for (int i = 0; i < n2; i++)
cout << b[i] << ' ';
cout << endl;
cout << "List C:";
for (int i = 0; i < k; i++)
cout << ans[i] << ' ';
cout << endl;
return 0;
}
顺序表逆置
#include <stdio.h>
#include <malloc.h>
#include <stdlib.h>
#define Listsize 100
typedef struct
{
int* elem;
int length;
int listsize;
}Sqlist;
int InitLIST(Sqlist* L)
{
L->length = 0;
L->listsize = Listsize;
L->elem = (int*)malloc(sizeof(int) * Listsize);
return 1;
}
int inserList(Sqlist* L, int i, int e)
{
if (i<1 || i>L->length + 1)
return 0;
if (L->length >= L->listsize)
return 0;
for (int j = i - 1; j < L->length; j++)
L->elem[j + 1] = L->elem[j];
L->elem[i - 1] = e;
L->length++;
return 1;
}
void displaylist(Sqlist *L)
{
for (int i = 0; i < L->length; i++)
printf("%d ", L->elem[i]);
printf("\n");
}
void mergelist_Sq(Sqlist *LA, Sqlist *LB, Sqlist* LC)
{
int* pa = LA->elem;
int* pb = LB->elem;
LC->length = LA->length + LB->length;
LC->elem = (int*)malloc(sizeof(int) * LC->length);
int* pc = LC->elem;
int* pa_last = pa + LA->length - 1;
int* pb_last = pb+ LB->length - 1;
while (pa <= pa_last && pb <= pb_last)
{
if (*pa <= *pb) {*pc = *pa; pc++;pa++;}
else {*pc = *pb; pc++;pb++;}
}
while (pa <= pa_last) {*pc = *pa;pc++;pa++;}
while (pb <= pb_last) {*pc = *pb;pc++;pb++;}
}
void converlist(Sqlist *L)
{
int mid = L->length/2;
for(int i=0;i<mid;i++)
{
int t = L->elem[i];
L->elem[i] =L->elem[L->length-1-i];
L->elem[L->length-1-i] = t;
}
}
int main()
{
Sqlist L;
InitLIST(&L);
int n,e;
scanf("%d",&n);
int i=1;
while(n>0)
{
scanf("%d",&e);
inserList(&L,i,e);
i++;
n--;
}
printf("The List is:");
displaylist(&L);
printf("The turned List is:");
converlist(&L);
displaylist(&L);
return 0;
}
链表基本操作
#include<stdio.h>
#include<malloc.h>
#define ERROR 0
#define OK 1
#define ElemType int
typedef struct LNode
{
int data;
struct LNode *next;
}LNode,*LinkList;
int CreateLink_L(LinkList &L,int n){
LinkList p,q;
int i;
ElemType e;
L = (LinkList)malloc(sizeof(LNode));
L->next = NULL;
q = (LinkList)malloc(sizeof(LNode));
q = L;
for (i=0; i<n; i++) {
scanf("%d", &e);
p = (LinkList)malloc(sizeof(LNode));
p->data=e;
p->next=NULL;
q->next=p;
q=q->next;
}
return OK;
}
int LoadLink_L(LinkList &L){
LinkList p = L->next;
if( p==NULL )printf("The List is empty!");
else
{
printf("The LinkList is:");
while(p!=NULL)
{
printf("%d ",p->data);
p=p->next;
}
}
printf("\n");
return OK;
}
int LinkInsert_L(LinkList &L,int i,ElemType e){
LinkList p=L;
int j=1;
while(p && j<i)
{
p=p->next;
j++;
}
if(!p|| j>i) return ERROR;
LinkList s;
s=(LinkList)malloc(sizeof(LNode));
s->data=e;
s->next=p->next;
p->next=s;
return OK;
}
int LinkDelete_L(LinkList &L,int i, ElemType &e){
LinkList p=L;
int j=0;
while(p->next && j<i-1)
{
p=p->next;
++j;
}
if(!(p->next) || j>i-1) return ERROR;
LinkList q=p->next;
p->next=q->next;
e=q->data;
free(q);
return OK;
}
int main()
{
LinkList T;
int a,n,i;
ElemType x, e;
printf("Please input the init size of the linklist:\n");
scanf("%d",&n);
printf("Please input the %d element of the linklist:\n", n);
if( CreateLink_L(T,n))
{
printf("A Link List Has Created.\n");
LoadLink_L(T);
}
while(1)
{
printf("1:Insert element\n2:Delete element\n3:Load all elements\n0:Exit\nPlease choose:\n");
scanf("%d",&a);
switch(a)
{
case 1: scanf("%d%d",&i,&x);
if(!LinkInsert_L(T,i,x)) printf("Insert Error!\n");
else printf("The Element %d is Successfully Inserted!\n", x);
break;
case 2: scanf("%d",&i);
if(!LinkDelete_L(T,i,e)) printf("Delete Error!\n");
else printf("The Element %d is Successfully Deleted!\n", e);
break;
case 3: LoadLink_L(T);
break;
case 0: return 1;
}
}
}
合并链表
#include<stdio.h>
#include<malloc.h>
#define ERROR 0
#define OK 1
#define ElemType int
typedef int Status;
typedef struct LNode
{
int data;
struct LNode* next;
}LNode, * LinkList;
Status ListInsert_L(LinkList& L, int i, ElemType e) {
LinkList p, s;
p = L;
int j = 0;
while (p && j < i - 1) {
p = p->next;
++j;
}
if (!p || j > i - 1) return ERROR;
s = (LinkList)malloc(sizeof(LNode));
s->data = e; s->next = p->next;
p->next = s;
return OK;
}
Status ListDelete_L(LinkList& L, int i, ElemType& e) {
LinkList p, q;
p = L;
int j = 0;
while (p->next && j < i - 1) {
p = p->next;
++j;
}
if (!(p->next) || j > i - 1) return ERROR;
q = p->next;
p->next = q->next;
e = q->data;
free(q);
return OK;
}
Status LoadLink_LA(LinkList& L)
{
LinkList p = L->next;
{
printf("List A:");
while (p)
{
printf("%d ", p->data);
p = p->next;
}
}
printf("\n");
return OK;
}
Status LoadLink_LB(LinkList& L)
{
LinkList p = L->next;
{
printf("List B:");
while (p)
{
printf("%d ", p->data);
p = p->next;
}
}
printf("\n");
return OK;
}
Status CreatLink_L(LinkList& L, int n)
{
LinkList p, q;
int i;
ElemType e;
L = (LinkList)malloc(sizeof(LNode));
L->next = NULL;
q = (LinkList)malloc(sizeof(LNode));
q = L;
for (i = 0; i < n; i++)
{
scanf("%d", &e);
p = (LinkList)malloc(sizeof(LNode));
p->data = e;
p->next = NULL;
q->next = p;
q = q->next;
}
return OK;
}
int main()
{
int n, m;
scanf("%d", &n);
LinkList L1;
CreatLink_L(L1, n);
scanf("%d", &m);
LinkList L2;
CreatLink_L(L2, m);
LoadLink_LA(L1);
LoadLink_LB(L2);
LinkList p, q;
p = L1, q = L2;
p = p->next; q = q->next;
printf("List C:");
while (q && p)
{
if (p->data > q->data)
{
printf("%d ", q->data);
q = q->next;
}
else
{
printf("%d ", p->data);
p = p->next;
}
}
while (q)
{
printf("%d ", q->data);
q = q->next;
}
while (p)
{
printf("%d ", p->data);
p = p->next;
}
return 0;
}
逆置链表
void reverseList(LNode*& L)
{
LNode* p, * next;
p = L->next;
L->next = NULL;
while (p)
{
next = p->next;
p->next = L->next;
L->next = p;
p = next;
}
}