数据结构之:常用数据结构的建立(C语言)

来源:互联网 发布:ubuntu gcc离线安装包 编辑:程序博客网 时间:2024/06/09 20:53

一、线性表的顺序存储结构

#define MaxSize 20//存储空间初始分配量typedef int ElemType;//ElemType类型根据实际情况而定,这里假设为inttypedef struct{ElemType data[MaxSize];//数组存储数据元素,最大值为MaxSizeint length;//线性表当前长度}SqList;//分号“;”不能忘记
顺序存储结构需要三个属性:

1)存储空间的起始位置:数组data,它的存储位置就是存储空间的存储位置。

2)线性表的最大存储容量:数组长度MaxSize。

3)线性表的当前长度:length。

二、线性表的链式存储结构:单链表

单链表中,我们在C语言中可用结构指针来描述
typedef int Status;typedef int ElemType;//ElemType类型根据实际情况而定,这里假设为inttypedef struct Node{ElemType data;/*定义数据域*/struct Node *next;/*定义指针域*/}Node;typedef struct Node *ChainList; /* 定义链表 */
/*初始化*/Status Init(ChainList *head){    //创建头结点,并使头指针指向头结点    *head=(ChainList)malloc(sizeof(Node));/*分配空间*/    //分配存储地址失败    if (*head==NULL) return ERROR;    //指针域为空    (*head)->next=NULL;    return OK;}

三、二叉树

二叉链表的节点结构定义
/*二叉树的二叉链表节点结构定义*/typedef int TElemType;//ElemType类型根据实际情况而定,这里假设为inttypedef struct BiNode/*节点结构*/{TElemType data;/*节点数据*/struct BiNode *lchild, *rchild;/*左右孩子指针*/}BiTNode, *BiTree;/*二叉树的建立*//*按前序输入二叉树中的节点值(一个字符)*//*#表示空树,构造二叉链表表示二叉树T。*/void CreatBiTree(BiTree *T){TElemType ch;scanf("%c", &ch);if (ch == '#'){*T = NULL;}else{*T = (BiTree)malloc(sizeof(BiTNode));/*注意malloc()的用法*/if (!*T)exit(OVERFLOW);/*注意exit()的用法*/(*T)->data = ch;/*生成根节点*/CreatBiTree(&(*T)->lchild);/*构造左子树*/CreatBiTree(&(*T)->rchild);/*构造右子树*/}}

三、栈的顺序存储结构

栈的顺序存储结构定义:
/*栈的顺序存储结构定义*/typedef int SElemType;typedef struct{SElemType data[MaxSize];int top;  /*用于存放栈顶指针*/}SqStack;
进栈操作push:
/*插入元素e为新的栈顶元素*/#define ERROR 0;#define OK 1;typedef int SElemType, Status;Status Push(SqStack *S, SElemType e){if (S->top == MaxSize - 1)//栈满return ERROR;S->top++;S->data[S->top] = e;return OK;}
出栈操作pop:
/*若栈非空,则删除S的栈顶元素,用e返回其值,并返回OK;否则返回ERROR*/Status Pop(SqStack *S, SElemType *e){if (S->top == -1)//栈为空return ERROR;*e = S->data[S->top];S->top--;return OK;}









原创粉丝点击