欢迎来到 嗅灵易学

零基础也能上手的脚本技术课,一对一答疑带你入门

数据结构基础

数据结构基础

最近又翻翻数据结构方面的书,毕业到现在忘得差不多了,全当复习了,自己学点,看点,写点,基础东西,大牛可以闪人
两数字交换:
void swap(int *a,int *b){
int tmp;
tmp=*a;
*a=*b;
*b=tmp;
}
void swap(int x,int y){
x=x+y;
y=x-y;
x=x-y;
}
取字符串长度
while((ch=getchar())!='\n'){
string[i]=ch;
i++;
}
int lenstr(char  * str){
int i;
for(i=0;str[i]!='\0';i++){}
return i;
}
字符串拷贝
char *strcpy(char *newstr,char *str){
  for(int i=0; str[i]!='\0';i++){
  
    newstr[i]=str[i];
  }
     newstr[i]='\0';
return newstr;
}
字符串合并:
char *strcat(char *str,char *str2){
int j,i;
for( i=0;str[i]!='\0';i++);
for( j=0;str2[j]!='\0';j++){
str[i+j]=str2[j];
}
str[i+j]='\0';
return str;
}
字符串替换
char *strrep(char *str,char *str2,int num){
int i,j=0;
num--;
for(i=num;str[i]!='\0';i++)
  if(str2[j]!=0){
  str[i]=str2[j];
  j++;
  }
  else{
  break;
  }
return str;
}
字符串插入
int strlen(char *str){
int i;
for(i=0;str[i]!='\0';i++);
return i;
}
char *strins(char *str1,char *str2,int num){
int s_len;
int d_len;
int i,j;
num --;
s_len=strlen(str1);
d_len=strlen(str2);
for(i=s_len+1;i>=num;i--){
str1[i+d_len]=str1[i];
}
for(j=num;str2[j-num]!='\0';j++){
str1[j]=str2[j-num];
}
return str1;
}
字符串删除
char *strdel(char *string,int num,int len){
int i;
num--;
for(i=num+len;string[i]!='\0';i++){
string[i-len]=string[i];
}
string[i-len]='\0';
return string;
}
字符串比较
int strlen(char *string){
int i;
for(i=0;string[i]!='\0';i++){}
return i;
}
void strcmp(char *string,char *string2){
int s_len;
int d_len;
int i,j;
s_len=strlen(string);
d_len=strlen(string2);
if(s_len!=d_len){
printf("this string no enque\n");
}else{
  for(i=0;i<s_len;i++){
  if(string[i]==string2[i]){
  printf("%dsame\n",i+1);
  }else{
  j=1;
  printf("%dno same\n",i+1);
  }
  }
  if(j==1){
  printf("this string no enque\n");
  }else{
  printf("this string enque\n");
  }
}}
字符串截取
char *substr(char *string,int num,int len){
int i,j;
for(i=num,j=0;i<num+len;i++,j++){
string[j]=string[i];
}
string[j]='\0';
return string;
}
结构体求分数平均值:
#include <stdio.h>
#include <stdlib.h>
int main(){
  int num;
  int i,j;
 int sum_math,sum_english,sum_chinese;
 sum_math=sum_english=sum_chinese=0;
struct grade {
  float math;
  float  english;
  float chinese;
};
printf("please enter stduent num:\n");
scanf("%d",&num);
struct grade *score;
score=(struct grade *)malloc(num*sizeof(struct grade));
if(!score){
printf("erro");
}else{
  for(i=0;i<num;i++)
{
    printf("please enter student %d\n",i+1);
    printf("please enter math score:\n"); 
    scanf("%f",&score[i].math);
  sum_math=sum_math+score[i].math;
  printf("please enter english score:\n");
  scanf("%f",&score[i].english);
    sum_english=sum_english+score[i].english;
  printf("please enter chinese score:\n");
  scanf("%f",&score[i].chinese);
    sum_chinese=sum_chinese+score[i].chinese;
  }
}
printf("this student math ave:\n");
printf("%f\n",(float)sum_math/(float)num);
printf("this student english ave:\n");
printf("%f\n",(float)sum_english/(float)num);
printf("this student chinese ave:\n");
printf("%f\n",(float)sum_chinese/(float)num);

}
链表:
基础链表创建:
struct grade{
int num;
char name[30];
struct grade *next;
};
typedef struct grade node;
typedef node *llink;
llink ptr,ptr1;
llink head;
llink createnode(){
head=(llink)malloc(sizeof(node));
if(!head){
printf("err");
}else{
printf("please enter student num:\n");
scanf("%d",&head->num);
printf("pleae enter student name:\n");
scanf("%s",head->name);
head->next=NULL;
ptr=head;
for(int i=0;i<4;i++){
ptr1=(llink)malloc(sizeof(node));
if(!ptr1){
printf("err");
}else{
printf("please enter student num:\n");
scanf("%d",&ptr1->num);
printf("pleae enter student name:\n");
scanf("%s",ptr1->name);
ptr1->next=NULL;
ptr->next=ptr1;
ptr=ptr->next;
}
     
}
}
return head;
}
链表查找:
llink findnode(llink head,int num){
ptr=head;
while(ptr !=NULL){
  if(ptr->num==num){
  printf("%s",ptr->name);
  ptr=ptr->next;
        return ptr;
  }
  else{
  return NULL;
  }
}
链表
llink linknode(llink head,llink ptr){
  while(head->next!=NULL){
    head=head->next;
    head->next=ptr;
      return head;
  }
}
链表输出:
void printnode(llink head){
  while(head->next!=NULL){
  printf("%d",ptr->num);
  printf("%s",ptr->name);
  head=head->next;
}
}
链表节点删除
llink delnode(llink head,llink ptr){
if(head==ptr){
return head->next;
}else
{
while(head->next!=ptr){
head=head->next;
}
if(ptr->next==NULL){
head->next=NULL;
}else{
head->next=ptr->next;
}
}
return head;
}
释放链表节点
void freenode(llink head){
  llink ptr;
  while(head!=NULL){
  ptr=head;
  head=head->next;         
  free(ptr);  
}
}
链表节点插入:
llink insertnode(llink head,llink ptr,int value){
llink newnode;
newnode=(llink)malloc(sizeof(node));
if(!newnode){
printf("err");
}else{
printf("please enter num:\n");
scanf("%d",&newnode->num);
printf("please enter name:\n");
scanf("%s",newnode->name);
newnode->next=NULL;
}
if(ptr==NULL)
{
   newnode->next=head;
}else
{if(ptr->next==NULL){
ptr->next=newnode;
}else{
newnode->next=ptr->next;
ptr->next=newnode;

}}
return head;
}
循环链表创建:
llink createclist(int *array,int len){
llink head;
llink before;
int i;
head=(llink)malloc(sizeof(node));
if(!head)
return NULL;
head->data=array[0];
head->next=NULL;
before=head;
for(i=;i<len;i++){
new_node=(llink)malloc(sizeof(node));
if(!new_node)
return NULL;
new_node->data=array[i];
new_node->next=NULL;
before->next=new_node;
before=new_node;
}
new_node->next=head;
return head;
}

注意:上传附件及图片大小不得大于30M。

⚠️ 版权声明:
本博客所有内容(含教程、源码、工具)仅供个人技术学习与研究交流使用,严禁商用、倒卖、二次分发及非法用途。
未经作者书面授权,任何组织或个人不得转载、复制或用于其他平台,违者将追究相关责任。

0 0 0 举报
复制成功