数据结构代码(顺序表,链表,文件读取)

顺序表

删除特定值

#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 = ErFen(x,A,0,arrayList-1);
    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){
	//if(a.length + b.length > c.maxsize) return 0;
	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;
		}
	}
	
	//if(a.data[a.length-1] == t) right = a.length-1;
	
	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;
    //r1->next = pre;
}

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);
    //Delete_Node(s, 3);
    //Print_Linklist(s);
    //Print_Linklist_adverse2(s->next);
    //Delete_MinNode(s);
    //Reverse_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);
	}
	//putchar(10);
	fclose(fr);
	fclose(fo);
	return 0;
}
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值