循环双向链表-C语言实现】的更多相关文章

直接贴出完整代码,每个函数的功能及部分代码的解释都在注释中,代码亲测可行 /* 2018.8.15 注意三点: 1.不要将循环写成if //很尴尬,主要是我犯了这个错误,找了半天还没找出来,第二天看的时候才发现,非常的尴尬 2.循环链表的判空操作是 p->rear != *L 3.p = *L,循环体中用p->rear做条件 这种写法便于对当前结点的前一结点操作,插入.删除.修改操作使用这种形式 p = *L->rear,循环体中用p做条件 这种写法便于对当前结点操作,查找.遍历使用这种…
#include <stdio.h> #include <stdlib.h> typedef int ElemType; typedef struct DLNode{ ElemType data; struct DLNode *next; struct DLNode *prior; }DLNode; DLNode *InitList(DLNode *DL);//初始化 int ListEmpty(DLNode *DL);//判空 int ListLength(DLNode *DL)…
在前文实现单向链表的基本操作下,本文实现双向链表的基本操作. 双向链表与单链表差异,是双向链表结点中有前向指针和后向指针.所以在插入和删除新结点元素时候不见要考虑后向指针还要考虑前向指针. 以下是双向链表的C代码: #include<stdio.h> typedef struct node { int data; struct node *next; struct node *prior }Node; //链表的初始化 Node* InitList(int number) { int i; N…
一个长度为len的字符串,对其循环右移n位 [期望]char str[] = "abcdefg";右移3次后,变成"efgabcd" [思路] 思路1. 如果用每移动一次,就要把整个字符串整体移动一次的方法,显得太费劲了.我们可以用空间换时间,通过内存拷贝来实现.需要新申请一块相同大小的内存,把原字符串的后n个字节拷贝到它的开始地址,把原字符串的前(len-n)个字节拷贝到它的(开始地址+n)处. 为便于查看结果,我们先定义一个打印字符串的函数void print_…
dlist.h #ifndef __dList_H #define __dlist_H typedef int Item; typedef struct Node *PNode; typedef PNode Position; /*定义节点类型*/ typedef struct Node { Item data; /*数据域*/ PNode previous; /*指向前驱*/ PNode next; /*指向后继*/ }Node; /*定义链表类型*/ typedef struct { PNo…
#ifndef _CONST_H_#define _CONST_H_ #include <stdio.h>#include <stdlib.h> typedef enum { False = 0, True,}Bool; typedef int ElemType; #define QUEUE_MAX_SIZE 10 #define STACK_INIT_SIZE 10#define STACK_INCREMENT_SIZE 2 #define Null ((void *)0) ty…
"Queue.h" #include "Queue.h" #include <stdio.h> #include <stdlib.h> status Queue_init(SqQueue *Q) { Q->data = (char*)malloc(sizeof(char)*MAXSIZE); Q->front = ; Q->rear = ; return OK; } status Queue_In(SqQueue *Q,ch…
{% if not Article_type_id %} <li class="active"><a href="/">全部</a></li>{% else %} <li><a href="/">全部</a></li>{% endif %} {% for row in type_choice %} {% if row.0 == Article_type…