在这之前我们学习的线性表和队列,在学习新的内容我对之前的内容进行简单的总结。
一、线性表
线性表是最常用且最简单的一种数据结构,它是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]);
}`
这篇博客是对线性结构的总结,包括线性表的定义和两种实现方式——数组和链表,以及特殊线性表栈和队列的特性,强调了栈操作仅限栈顶,队列遵循先进先出原则。

被折叠的 条评论
为什么被折叠?



