首页
社区
课程
招聘
[分享]数据结构基础
发表于: 2012-7-13 15:45 5083

[分享]数据结构基础

2012-7-13 15:45
5083

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


[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

收藏
免费 6
支持
分享
最新回复 (5)
雪    币: 378
活跃值: (702)
能力值: ( LV9,RANK:170 )
在线值:
发帖
回帖
粉丝
2
void swap(int x,int y){
x=x+y;
y=x-y;
x=x-y;
}

大数的话会溢出...为什么不用异或呢?
2012-7-13 16:35
0
雪    币: 219
活跃值: (190)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
虽然是溢出了,但是对结果是无任何影响的.不过速度肯定比不上异或.
2012-7-13 17:26
0
雪    币: 2993
活跃值: (25)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
4
void swap(int &a,int &b){
int tmp;
tmp=a;
a=b;
b=tmp;
}
2012-7-13 17:42
0
雪    币: 125
活跃值: (161)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
5
void swap(int &a,int &b)
{
    a = a^b
    b = a^b
    a = a^b
}
2012-7-19 19:32
0
雪    币: 239
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
准备学数据结构,make……
2012-7-19 19:41
0
游客
登录 | 注册 方可回帖
返回
//