慢跑20 发表于 2014-3-10 21:34

数据结构,清华 严蔚敏,例题代码(自己写的,持续更新中)

本帖最后由 慢跑20 于 2014-3-10 21:38 编辑

计算机基础课数据结构,清华严蔚敏这本书是公认的一本好书。
刚好这学期我们学习数据结构,想把一些例题的代码写一些、既提高了C语言的水平,又可以加深对数据结构的理解,为以后打下良好的基础。

慢跑20 发表于 2014-3-10 21:34

本层占楼编辑

慢跑20 发表于 2014-3-10 21:35

20页,例2.1 A,B两个集合,合并成C集合。
这个代码是用数组的、算是比较简单的。

#include<stdio.h>
int L_length(char []);
int main(){
        void Union(char [],char [],char []);

        char a;
        char b;
        char c;
        gets(a);
        printf("输入的集合A是\n");
        puts(a);

        gets(b);
        printf("输入的集合B是\n");
        puts(b);

        Union( a, b, c);
        printf("last得到集合C是\n");
        puts(c);
        return 0;
}

void Union(char a[],char b[],char c[])
{
        int flag=1,t=0,i,j,m,n;
        m=L_length(b);
        n=L_length(a);
        for(j=0;j<n;j++)
        c=a;
        for(i=0;i<m;i++,flag=1)                        //i为b数组的下标,m为数组个数;  j为a数组的下标,n为数组个数;
                {for(j=0;j<n;j++)
                        if(b==a) flag=0;//flag=0,说明有重复的了
                        if(flag) {  c=b;t++        ;}
                }
        c='\0';

}

int L_length(char a[])
{
        int i,t=0;;
        for(i=0; a!='\0';i++  )
                        t++;
        return t;
}

慢跑20 发表于 2014-3-14 09:32

本帖最后由 慢跑20 于 2014-3-19 13:53 编辑

li2.1yong用指针:

#include "stdio.h"
#include "string.h"
void Union(char *a,char *b,char *c)
{
char *p=a;
char *q=b;
char *r=c;
while(*p) *r++=*p++;
p=a;
for(  ;*q!=0 ; q++,p=a  )
{while(*p)
if(*q==*p){q++;p=a;}
else p++;
*r=*q;
r++;
}
*r=0;

}

int main(){

char a;
char b;
char c;
gets(a);
printf("输入的集合A是\n");
puts(a);

gets(b);
printf("输入的集合B是\n");
puts(b);

Union(a,b,c);
printf("last得到集合C是\n");
puts(c);
return 0;
}

慢跑20 发表于 2014-3-14 09:33

第2章最后开始用链表了,由于以前没有接触。这里要重新学习链表:
#include<stdio.h>

  struct node
{
        int data;
        struct node *next;
};
//typedef struct node NODETYPE;
void main()
{
        //NODETYPE
        node a,b,c,*h,*p;
        a.data=10;b.data=20;c.data=30;
        h=&a;
        a.next=&b;b.next=&c;c.next='\0';
        p=h;
        while(p)
        {
                printf("%d  ",p->data);
                p=p->next;
        }
        printf("\n");
}

这是一个简单的链表。从这里可以了解规则

慢跑20 发表于 2014-3-14 09:38

此代码为生成一个链表的代码:
#include<stdio.h>
#include<stdlib.h>
struct slist
{
        int data;
        struct slist *next;
};
typedef struct slist SLIST;
SLIST *creat_slist1()
{
        int c;
        SLIST *h,*s,*r;
        h=(SLIST *)malloc (sizeof(SLIST) );  //生成头结点
        r=h;
        scanf("%d",&c);
        while (c!=-1)                                        //当输入的c为-1时,代表输入结束
        {
                s=(SLIST *)malloc(sizeof(SLIST) );  //生成一个新结点
                s->data=c;
                r->next=s;
                r=s;
                scanf("%d",&c);
         
        }
        r->next ='\0';
        return h;
}

/*
printf_list(&head)
{        SLIST *h,*s,*r;
        int c;
        h=(SLIST *)malloc (sizeof(SLIST) );
        r=h;
        s->data=c;
        //scanf("%d",&c);
        while (c!=-1)
        {
                printf("%d",c);
                s=(SLIST *)malloc(sizeof(SLIST) );
                s->data=c;
                r->next=s;
                r=s;
               
         
        }
        r->next ='\0';
        return h;
}
*/
void main()
{ SLIST *head;

head=creat_slist1();                //调用链表建立函数,得到头结点地址
printf_list(head)
}

慢跑20 发表于 2014-3-19 13:54

2。4节需要用链表计算多项式的加法,因此,熟悉结构体是非常必要的。

#include<stdio.h>
#include<stdlib.h>

struct slist
  {
  int data;
  struct slist *next;
  };
  typedef struct slist SLIST;

SLIST *creat_slist1()
  {
  int c;
  SLIST *h,*s,*r;
  h=(SLIST *)malloc (sizeof(SLIST) ); //生成头结点
r=h;
  scanf("%d",&c);
  while (c!=-1) //当输入的c为-1时,代表输入结束
{
s=(SLIST *)malloc(sizeof(SLIST) ); //生成一个新结点
s->data=c;
  r->next=s;
  r=s;
  scanf("%d",&c);

}
  r->next ='\0';
  return h;
  }

/**/  //想加入一个函数,在刚才输入链表各个数值之后,再输出这些值。如何写呢?
int printf_list(SLIST *h)
  {
  //while (!h->next )//教材上经常使用这个语句作为h->next是否为空指针的判断语句,但在VC++里边,这一句与下边一句效果不同,具体原因还不清楚
while (h->next!=0 )
  {
  printf("%d\n",h->next->data );
  h=h->next ;
  }
  return 1;
  }
  /**/
void main()
  { SLIST *head;

head=creat_slist1(); //调用链表建立函数,得到头结点地址
printf_list(head);
  }


此函数功能为:输入链表中的数,然后依次输出。
页: [1]
查看完整版本: 数据结构,清华 严蔚敏,例题代码(自己写的,持续更新中)