数据结构基础
最近又翻翻数据结构方面的书,毕业到现在忘得差不多了,全当复习了,自己学点,看点,写点,基础东西,大牛可以闪人
两数字交换:
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;
}
