线性结构总结

这篇博客是对线性结构的总结,包括线性表的定义和两种实现方式——数组和链表,以及特殊线性表栈和队列的特性,强调了栈操作仅限栈顶,队列遵循先进先出原则。

在这之前我们学习的线性表和队列,在学习新的内容我对之前的内容进行简单的总结。
一、线性表
线性表是最常用且最简单的一种数据结构,它是n个数据元素的有限序列。

实现线性表的方式一般有两种,一种是使用数组存储线性表的元素,即用一组连续的存储单元依次存储线性表的数据元素。另一种是使用链表存储线性表的元素,即用一组任意的存储单元存储线性表的数据元素(存储单元可以是连续的,也可以是不连续的。(下边是链表的简单代码)

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

typedef int DataType; 
struct Node {
    DataType      data;  
    struct Node*  next;  
};
typedef struct Node  *PNode;     
typedef struct Node  *LinkList;  

LinkList SetNullList_Link() 
{
    LinkList head = (LinkList)malloc(sizeof(struct Node));
    if (head != NULL) head->next = NULL;
    else printf("alloc failure");
    return head; 
}

int IsNull_Link(LinkList llist)
{
    return(llist->next == NULL);
}

void CreateList(struct Node *head)
{
    PNode p = NULL;  int data;
    scanf("%d", &data);
    while (data != -1) { 
        p = (struct Node*)malloc(sizeof(struct Node));
        p->data = data;  
        p->next = head->next;  
        head->next = p;
        scanf("%d", &data);
    }
}

二、栈与队列
栈和队列也是比较常见的数据结构,它们是比较特殊的线性表,因为对于栈来说,访问、插入和删除元素只能在栈顶进行,对于队列来说,元素只能从队列尾插入,从队列头访问和删除。`
(以下是链队列的简单代码 ///)

#include <stdio.h>
#include <stdlib.h>
typedef char DataType;
struct Queue
{
    int Max;  
    int f;   
    int r;  
    DataType *elem; 
};
typedef struct Queue *SeqQueue;

SeqQueue SetNullQueue_seq(int m) 
{
    SeqQueue squeue;
    squeue = (SeqQueue)malloc(sizeof(struct Queue));
    if (squeue == NULL)
    {
        printf("Alloc failure\n");
        return NULL;
    }
    squeue->elem = (char*)malloc(sizeof(DataType)*m);
    if (squeue->elem != NULL)
    {
        squeue->Max = m;
        squeue->f = 0;
        squeue->r = 0;
        return squeue;
    }
}
``void EnQueue_seq(SeqQueue squeue, DataType x)  
{
	if((squeue->r+1)%squeue->Max==squeue->f)
        printf("It is FULL Queue!");
        else
        {
         squeue->elem[squeue->r]=x;
            squeue->r=(squeue->r+1)%(squeue->Max);
        }
}
void DeQueue_seq(SeqQueue squeue)  
{
	 if(IsNullQueue_seq(squeue))
         printf("It is empty queue!\n");
    else
        squeue->f=(squeue->f+1)%(squeue->Max);
}
DataType FrontQueue_seq(SeqQueue squeue)
{
   if(squeue->f==squeue->r)
        printf("It is empty Queue!\n");
    else
        return(squeue->elem[squeue->f]);
}`


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值