顺序表
删除特定值
#include <iostream>
#include <stdio.h>
using namespace std;
struct SqList{
int data[50];
int length;
};
bool Del_Data1(SqList &a,int &num){
if(a.length == 0) return 0;
int k = 0;
for(int i=0;i<a.length;i++){
if(a.data[i] == num) k++;
else a.data[i-k] = a.data[i];
}
a.length -= k;
return 1;
}
bool Del_Data2(SqList &a,int &num){
if(a.length == 0) return 0;
int k = 0;
for(int i=0;i<a.length;i++){
if(a.data[i] != num){
a.data[k] = a.data[i];
k++;
}
}
a.length = k;
return 1;
}
int main(){
SqList a;
int num;
Del_Data(a,num);
return 0;
}
二分查找
#include <stdio.h>
int ErFen1(int x, int A[], int left, int right,int arrayList){
while(left <= right){
int mid = (left + right) >> 1;
printf("L:%d R:%d Mid:%d\n",left,right,(left+right)/2);
if(A[mid] == x) return mid;
else if(A[mid] < x){
left = mid + 1;
}else if(A[mid] > x){
right = mid - 1;
}
}
printf("L:%d R:%d Mid:%d\n",left,right,(left+right)/2);
if(left > right){
for(int i=arrayList-1; i>right; i--){
A[i+1] = A[i];
}
A[left] = x;
}
return -1;
}
int List_exchange(int x, int A[], int arrayList){
int num = ErFen1(x,A,0,arrayList-1,arrayList);
if(num != -1){
if(num != arrayList-1){
int temp = A[num];
A[num] = A[num+1];
A[num+1] = temp;
}
}
return num;
}
int main(){
int A[9+5] = {1,2,3,4,6,7,8,10,11};
int num = List_exchange(12, A, 9);
for(int i=0;i<10;i++){
printf(" %d ",A[i]);
}
printf("\n");
printf(" %d ",num);
return 0;
}
int ErFen(int x, int A[], int left, int right){
if(left <= right){
int mid = (left + right) >> 1;
if(A[mid] == x) return mid;
else if(A[mid] > x){
return ErFen(x, A, left, mid-1);
}
else{
return ErFen(x, A, mid+1, right);
}
}else{
return -1;
}
}
合并两个有序表
#include <stdio.h>
struct ac{
int data[50];
int length;
int maxsize;
};
bool Merge_ab(ac a,ac b,ac &c){
int k=0;
int i=0,j=0;
while(i<a.length&&j<b.length){
if(a.data[i]<=b.data[j]){
c.data[k++] = a.data[i];
i++;
}else{
c.data[k++] = b.data[j];
j++;
}
}
while(i < a.length){
c.data[k++] = a.data[i++];
}
while(j < b.length){
c.data[k++] = b.data[j++];
}
c.length = a.length + b.length;
return 1;
}
int main(){
ac a,b,c;
c.maxsize = 50;
a.data[0] = 1;
a.data[1] = 4;
a.data[2] = 6;
a.data[3] = 6;
b.data[0] = 2;
b.data[1] = 3;
b.data[2] = 4;
b.data[3] = 7;
b.data[4] = 7;
a.length = 4;
b.length = 5;
Merge_ab(a,b,c);
for(int i=0;i<c.length;i++){
printf(" %d ",c.data[i]);
}
return 0;
}
逆序排列
#include <iostream>
#include <stdio.h>
using namespace std;
struct SqList{
int data[50];
int length;
};
bool ExC(SqList &a){
int s;
if(a.length<0) return 0;
if(a.length == 1||a.length == 0) return 1;
for(int i=0;i<=a.length/2;i++){
int j = a.length - i - 1;
a[i] = s;
a[i] = a[j];
a[j] = s;
}
return 1;
}
int main(){
SqList a;
ExC(a);
return 0;
}
删除特定区间(无序)
#include <stdio.h>
struct ac{
int data[50];
int length;
};
bool Del_data_s_t(ac &a,int s,int t){
if(a.length == 0|| s>=t) return 0;
int k=0;
for(int i=0;i<a.length;i++){
if(a.data[i]>=s && a.data[i]<=t) {
k++;
}else{
a.data[i-k] = a.data[i];
}
}
a.length -= k;
return 1;
}
int main(){
int s,t;
ac a;
Del_data(a,s,t);
return 0;
}
删除特定区间(有序)
#include <stdio.h>
#include <iostream>
using namespace std;
struct ac{
int data[50];
int length;
};
bool Del_data_s_t(ac &a , int s, int t){
if (a.length == 0 || s>=t) return 0;
int left=-1,right=-1;
for(int i=0;i<a.length;i++){
if(a.data[i]>=s) left = i;break;
}
if(left == -1) return 0;
for(int i=0;i<a.length;i++){
if(a.data[i]==t) {
right = i;break;
}
else if(a.data[i]>t){
right = i-1;break;
}
}
for(int i=left;i<=right;i++){
a.data[i+right-left+1] = a.data[i];
}
a.length -= right - left + 1;
return 1;
}
int main(){
ac a;
int s,t;
scanf("%d %d",&s,&t);
Del_data(a,s,t);
return 0;
}
删除特定值
#include <iostream>
#include <stdio.h>
using namespace std;
struct SqList{
int data[50];
int length;
};
bool Del_Data1(SqList &a,int &num){
if(a.length == 0) return 0;
int k = 0;
for(int i=0;i<a.length;i++){
if(a.data[i] == num) k++;
else a.data[i-k] = a.data[i];
}
a.length -= k;
return 1;
}
bool Del_Data2(SqList &a,int &num){
if(a.length == 0) return 0;
int k = 0;
for(int i=0;i<a.length;i++){
if(a.data[i] != num){
a.data[k] = a.data[i];
k++;
}
}
a.length = k;
return 1;
}
int main(){
SqList a;
int num;
Del_Data(a,num);
return 0;
}
删除重复值
#include <stdio.h>
struct ac{
int data[50];
int length;
};
bool Del_Repeat(ac &a){
if(a.length == 0) return 0;
int num = a.data[0];
int k = 0;
for(int i=1;i<a.length;i++){
if(a.data[i] == num){
k++;
}else{
a.data[i-k] = a.data[i];
num = a.data[i];
}
}
a.length -= k;
return 1;
}
int main(){
ac a;
a.data[0] = 1;
a.data[1] = 1;
a.data[2] = 2;
a.data[3] = 3;
a.data[4] = 5;
a.data[5] = 5;
a.data[6] = 6;
a.length = 7;
int num;
Del_Repeat(a);
for(int i=0;i<a.length;i++){
printf(" %d ",a.data[i]);
printf("\n");
}
printf("a.length = %d",a.length);
return 0;
}
找到最小值并删除
#include <iostream>
#include <stdio.h>
using namespace std;
struct SqList{
int data[50];
int length;
};
bool Del_Min(SqList &a,int &ans){
if(a.length == 0) return 0;
ans = a.data[0];
int pos = 0;
for(int i=1;i<a.length;i++){
if(a.data[i]<ans){
ans = a.data[i];
pos = i;
}
}
a.data[pos] = a.data[a.length-1];
a.length--;
return 1;
}
int main(){
SqList a;
int Ans;
Del_Min(a,Ans);
return 0;
}
链表
大全集
#include <stdio.h>
#include <mm_malloc.h>
typedef struct LNode{
int data;
LNode *next;
}LNode,*LinkList;
LinkList Init_Node(){
LinkList p = (LNode*)malloc(sizeof(LNode));
p -> next = NULL;
printf("The LinkList is created successfully!\n");
return p;
}
LinkList Head_Insert(LinkList &L){
int num;
LinkList S;
printf("Please input the value of Lnode: \n");
while(~scanf("%d",&num)){
if(num == 9999) break;
S = (LNode *)malloc(sizeof(LNode));
S -> data = num;
S -> next = L -> next;
L -> next = S;
}
return L;
}
void Print_Linklist(LinkList L){
if(L -> next == NULL) return ;
LinkList p = L -> next;
int timing = 1;
while(p){
printf("The %dth Linklist's value is : ",timing++);
printf(" %d \n",p->data);
p = p -> next;
}
printf("\n");
return ;
}
void Print_Linklist_adverse(LinkList L){
if(L->next == NULL){
printf(" %d ",L->data);
return ;
}
Print_Linklist_adverse(L->next);
printf(" %d ",L->data);
return ;
}
void Print_Linklist_adverse2(LinkList L){
if(L->next != NULL){
Print_Linklist_adverse(L->next);
}
if(L != NULL) printf(" %d ",L->data);
}
void Delete_Node(LinkList &L,int x){
LinkList p;
if(L==NULL) return ;
if(L->data==x){
p=L;
L=L->next;
free(p);
Delete_Node(L, x);
}else{
Delete_Node(L->next, x);
}
return ;
}
void Delete_MinNode(LinkList &L){
LinkList mn,mnpre;
int minn=9999;
LinkList s=L->next;
LinkList pre=L;
while(s != NULL){
if(s->data < minn){
minn = s->data;
mn = s;
mnpre = pre;
}
pre = s;
s = s->next;
}
printf("The minimum Lnode is %d\n",mn->data);
mnpre->next = mn->next;
free(mnpre);
}
void Reverse_LinkList(LinkList &L){
LinkList pre,r1,r2;
r1 = L->next;
r2 = r1->next;
r1->next = NULL;
while(r2 != NULL){
pre = r1;
r1 = r2;
r2 = r2->next;
r1->next = pre;
}
L->next = r1;
}
void LinkList_sort_Bubble(LinkList &L){
LinkList p = NULL;
LinkList q = NULL;
int tmp ;
for(p = L; p != NULL; p = p->next){
for(q = p; q->next != NULL; q = q->next){
if(q->data > q->next->data){
tmp = q->data;
q->data = q->next->data;
q->next->data = tmp;
}
}
}
}
void LinkList_sort_Direct(LinkList &L){
LinkList p = L->next;
LinkList r = p->next;
LinkList pre;
p->next = NULL;
p = r;
while(p != NULL){
r = p->next;
pre = L;
while(pre->next != NULL && pre->next->data < p->data){
pre = pre->next;
}
p->next = pre->next;
pre->next = p;
p = r;
}
}
int main(){
LinkList s = Init_Node();
Head_Insert(s);
Print_Linklist(s);
LinkList_sort_Direct(s);
Print_Linklist(s);
return 0;
}
文件读取
#include <stdio.h>
#include <iostream>
#include <string.h>
#include <math.h>
using namespace std;
int main(){
FILE *fr = NULL;
FILE *fo = NULL;
fr = fopen("D:\\Ctest\\in.txt","r");
fo = fopen("D:\\Ctest\\out.txt","w");
if(fr == NULL) {
printf("NO in!");
exit(0);
}
if(fo == NULL) {
printf("NO out!");
exit(0);
}
char ch = fgetc(fr);
while(ch != EOF){
fputc(ch,fo);
putchar(ch);
ch = fgetc(fr);
}
fclose(fr);
fclose(fo);
return 0;
}