编写算法实现建立一个带头结点的含n个元素的双向循环链表H,并在链表H中的第i个位置插入一个元素e
2015-02-05 00:54
686 查看
头文件:函数的声明
函数的定义
函数的应用
#include <stdio.h> #include <stdlib.h> #include <malloc.h> typedef char ElemType; typedef struct Node { ElemType data; struct Node* prior; struct Node* next; }DListNode,*DLinkList; int InitDList(DLinkList *head); DListNode *GetElem(DLinkList head,int i); void PrintDList(DLinkList head); int CreateDList(DLinkList head,int n); int InsertDList(DLinkList head,int i,ElemType e);
函数的定义
#include "双向链表.h" int InitDList(DLinkList *head) { *head = (DLinkList)malloc(sizeof(DListNode)); if(!head) { return -1; } (*head)->next = *head; (*head)->prior = *head; return 1; } DListNode *GetElem(DLinkList head,int i) { DListNode *p; int j = 1; p = head->next; while(p != head && j < i) { p = p->next ; j++; } if(p == head || j > i) { return NULL; } return p; } void PrintDList(DLinkList head) { DListNode *p; p = head->next; while(p != head) { printf("%c",p->data); p = p->next; } printf("\n"); } int CreateDList(DLinkList head,int n) { DListNode *s,*q; int i; ElemType e; q = head; for(i = 1;i <= n;i++) { printf("请输入第%d个元素",i); e = getchar(); s = (DLinkList)malloc(sizeof(DListNode)); s->data = e; s->next = q->next; q->next = s; s->prior = q; head->prior = s; q = s; getchar(); } return 1; } int InsertDList(DLinkList head,int i,ElemType e) { DListNode *p,*s; p = GetElem(head,i); if(!p) { return 0; } s = (DLinkList)malloc(sizeof(DListNode)); if(!s) { return -1; } s->data = e; s->prior = p->prior ; p->prior ->next = s; s->next = p; p->prior = s; return 1; }
函数的应用
#include "双向链表.h" int main(void) { DLinkList h; int n,pos; ElemType e; InitDList(&h); printf("请输入元素的个数:"); scanf("%d",&n); getchar(); CreateDList(h,n); printf("链表中的元素:"); PrintDList(h); printf("请输入插入元素:"); scanf("%c",&e); printf("请输入插入元素的位置:"); scanf("%d",&pos); InsertDList(h,pos,e); printf("插入元素后链表中的元素:"); PrintDList(h); return 0; }
相关文章推荐
- 向带头结点的双向链表中第i个位置之前插入元素e
- 数据结构 P38 算法实现 在带头结点的单链表的第i个元素插入元素e
- 输入一组整型元素序列,使用尾插法建立一个带有头结点的单链表。 ② 实现该线性表的遍历。 ③ 在该单链表的第i个元素前插入一个整数。 ④ 删除该单链表中的第i个元素,其值通过参数将其返回。 ⑤ 建立两个
- (2)单链表的操作 ① 输入一组整型元素序列,使用尾插法建立一个带有头结点的单链表。 ② 实现该线性表的遍历。 ③ 在该单链表的第i个元素前插入一个整数。 ④ 删除该单链表中的第i个元素,其值通过参数
- 从键盘读入n个整数(升序),请编写算法实现: 建立带表头结点的单链表; 显示单链表,(形如:H->10->20->30->40); 在有序单链表中插入新的数据元素x; 将单链表就地逆
- 假设以带头结点的循环链表表示队列, 并且只设一个指针指向队尾元素结点(注意不设头指针) 试编写相应的队列初始化,入队列和出队列的算法
- 链表中每个结点的data域存放一个二进制位。并在此链表上实现对二进制数加1的运算。 用C语言编写 用以存放输入的二进制数 建立 一个带头结点的线性链表
- 链表的基本操作(创建,查找指定位置元素,删除指定元素,插入,倒置,去重,求集合的差,分别交换结点与交换结点值实现的冒泡排序,将两个有序链表合并成一个有序链表)c语言实现
- 试编写在无头结点的单链表上实现线性表的插入操作的算法,并和带头结点的单链表上的插入操作的算法进行比较
- 双向循环链表的建立,插入,删除(不带头结点)
- C语言实现双向非循环链表(带头结点尾结点)的节点插入
- 双向循环链表插入算法的C++程序实现
- 数据结构习题分析:已知由一个线性链表表示的线性表中含有三类字符的数据元素,是编写算法将该线性表分割为三个循环链表,其中每个。。。。。
- 利用模板类编写一个程序,实现双向链表的插入、删除、查找、显示的功能。
- 用模板实现顺序表和带头结点的双向循环链表
- 设以带头结点的双向循环链表表示的线性表L= (a1,a2,…,an),试写一时间复杂度O(n)的算法,将L改造为 (a1,a3,…,an,…,a4,a2)。
- 给定一个循环链表,实现一个算法返回这个环的开始结点
- 假设以不带头结点的循环链表表示队列,并且只设一个指针指向队尾结点,但不设头指针。试设计相应的入队和出队的算法
- 建立一个带附加头结点的单链表.实现测长/打印/删除结点/插入结点/逆置/查找中间节点/查找倒数第k个节点/判断是否有环
- 双向循环链表的建立,插入,删除(带头节点)