您的位置:首页 > 其它

4.2 结构(struct) 与共用体(union)

2013-11-08 14:47 423 查看
概念性的东西就没必要多说了,想必有一定的C基础都会知道结构体和共用体,当然这个不是我这次的重点,重点是程序员经常使用的!

1 结构体说白了,就是将不同的类型组装起来,组装以后一般作为参数传递给函数(在C中要注意结构体一般初始化结构体,经常使用到malloc 分配空间,在bzero 基本就ok啦),当然也可以让函数返回一个结构体哈。待会可以贴一个C的例子参考(呵呵。学习C++貌似自己在回味c了呢

)!

头文件

也算一个数据结构哈!来看看吧,使用结构体 头文件来了哈!(学习时候写的,所以你懂的。。。。。)

#ifndef _ALIST_
#define _ALIST_
#include <stdio.h>
#include <stdlib.h>
#include <strings.h>
#define SIZE   10
#define DATA    0 
#define OFFSET  1
#define HEAD    0
#define TAIL   -1

typedef int data_t;
typedef struct alist{
 data_t data[SIZE];
 int num;
}ALIST;
ALIST *creat_alist(void);
void init_alist(ALIST *L);
int is_full(ALIST *L);
int is_null(ALIST *L);
void insert_alist(ALIST *L, data_t data, int offset);
int find_alist(ALIST *L, data_t data);
void delet_alist(ALIST *L, data_t data, int flage);
void sort_alist(ALIST *L, int flage);
void show_alist(ALIST *L);
#endif


实现

#include "alist.h"
ALIST *creat_alist(void)
{
 ALIST *L = (ALIST *)malloc(sizeof(ALIST));
 if(NULL == L)
  exit(-1);
 bzero(L, sizeof(ALIST));
 L->num = -1;
 return L;
}
void init_alist(ALIST *L) 
{
 bzero(L, sizeof(ALIST));
 L->num = -1;
}
int is_full(ALIST *L)
{
 return L->num == SIZE-1?1:0;
}
int is_null(ALIST *L)
{
 return L->num == -1?1:0;
}
void insert_alist(ALIST *L, data_t data, int offset)
{
 int n = L->num+1;
 switch(offset)
 {
 case HEAD:
  while(n--)
   L->data[n+1] = L->data
;
  L->data[0] = data;
  L->num++;
  break;
 case TAIL:
  L->data[L->num+1] = data;
  L->num++;
  break;
 default:
  if(0 > offset)
   insert_alist(L, data, HEAD);
  else
  if(L->num < offset)
   insert_alist(L, data, TAIL);
  else
  {
   while(n-- > offset)
    L->data[n+1] = L->data
;
   L->data[offset] = data;
   L->num++;
  }
  break;
 }
}
int find_alist(ALIST *L, data_t data)
{
 int i = 0;
 for(;i <= L->num; i++)
  if(data == L->data[i])
   return i;
 return -1;
}
void delet_alist(ALIST *L, data_t data, int flage)
{
 int n;
 int i;
 switch(flage)
 {
 case DATA:
  if(0 > (n = find_alist(L, data)))
   return;
  else
  {
   for(i = n; i < L->num; i++)
    L->data[i] = L->data[i+1];
   L->num--;
  }
  break;
 case OFFSET:
  if(data < 0 || data > L->num)
   return;
  else
  {
   n = data;
   while(n++ < L->num)
    L->data[n-1] = L->data
;
   L->num--;
  }
  break;
 default:
  break;
 } 
}
void sort_alist(ALIST *L, int flage)
{
// if(flage == UP?a[i] > a[i+1]:a[i] < a[i+1])
}
void show_alist(ALIST *L)
{
 int i = 0;
 for(;i <= L->num; i++)
  printf("%d, ", L->data[i]);
 printf("\n");
}


ok ,结构体使用就这些了哈!



2 共用体 待续

共用体和结构体还是不太一样哈,结构体可以存储不同的类型,而结构体只可以存储其中的一种类型。

上次同学还在讨论共用体问题,所以自己还是记得清楚,此时注意strut 和union的大小问题(由于公用体每次都只能存储一个值{int long 或 double},所以为最大成员长度),同时应该注意union是在编译运行时分配大小的哦!

根据上面的几点,你应该可以,知道union 可以节约内存就可以了哈,说真的自己感觉使用的还是非常少。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: