C 语言 数据结构之双向链表
来源:互联网 发布:mac os x 10.11 dmg 编辑:程序博客网 时间:2024/04/27 01:42
双向链表的空间结构如下图所示:
#include <stdio.h>
#include <stdlib.h>struct Node
{
char data;
struct Node *left;
struct Node *right;
};
typedef struct Node DListNode;
typedef struct Node *DLinkList;
int InitDList(DLinkList *head);
int CreateDList(DLinkList head,int n);
void PrintDList(DLinkList head);
DListNode *GetElem(DLinkList head,int i);
int InsertDList(DLinkList head,int i,char e);
int main(void)
{
DLinkList h;
int n; //链表元素个数
char e;
int pos;
InitDList(&h);
printf("输入元素个数:");
scanf("%d",&n);
getchar();
CreateDList(h,n);
printf("链表中的元素:");
PrintDList(h);
printf("请输入插入的元素及位置:");
scanf("%c",&e);
getchar();
scanf("%d",&pos);
InsertDList(h,pos,e);
printf("插入新元素后的链表中的元素:");
PrintDList(h);
return 0;
}
int InitDList(DLinkList *head) //初始化双向循环链表
{
*head=(DLinkList)malloc(sizeof(DListNode));
(*head)->left=*head;
(*head)->right=*head;
return 1;
}
int CreateDList(DLinkList head,int n) //创建双向循环链表
{
DListNode *p,*q;
int i;
char e;
q=head;
for(i=1;i<=n;i++)
{
printf("输入第%d个元素:",i);
e=getchar();
p=(DListNode*)malloc(sizeof(DListNode));
p->data=e;
/*将新生成的结点插入到双向循环链表*/
p->right=q->right;
q->right=p;
p->left=q;
head->left=p; /*这里要注意头结点的left指向新插入的结点*/
q=p; /*q始终指向最后一个结点*/
getchar();
}
return 1;
}
void PrintDList(DLinkList head)//输出双向循环链表中的每一个元素
{
DListNode *p;
p=head->right;
while(p!=head)
{
printf("%c",p->data);
p=p->right;
}
printf("\n");
}
DListNode *GetElem(DLinkList head,int i)//查找插入的位置,返回结点的指针,否则返回NULL
{
DListNode *p;
int j;
p=head->right;
j=1;
while(p!=head && j<i)
{
p=p->right;
j++;
}
if(p==head || j>i)
return NULL;
return p;
}
int InsertDList(DLinkList head,int i,char e) //在双向循环链表的第i个位置插入元素e
{
DListNode *p,*s;
p=GetElem(head,i);
if(!p)
return -1;
s=(DListNode*)malloc(sizeof(DListNode));
s->data=e;
s->left=p->left;
p->left->right=s;
s->right=p;
p->left=s;
return 1;
}
0 0
- C语言数据结构之双向链表
- C 语言 数据结构之双向链表
- 数据结构之---c语言实现双向链表操作
- 数据结构之双向链表(C语言实现)
- C语言数据结构双向链表之温故而知新
- C语言数据结构----双向链表
- C语言基础—数据结构之单向循环链表和双向循环链表
- C语言之双向链表
- C语言之list_head双向链表
- 数据结构C语言实现系列——双向链表
- (C语言)双向链表实现案例(数据结构六)
- 数据结构——双向链表(C语言)
- C语言数据结构--双向链表的学习
- c语言_数据结构_双向循环链表
- 数据结构--双向循环链表c语言实现
- c语言_数据结构_双向循环链表
- 数据结构——双向链表(C语言实现)
- C语言(数据结构) - 双向链表的基本操作
- linux c编程
- PowerShell VS Bash
- Android 自定义广播
- P1786 质因数分解
- Concurrent包同步器模拟程序
- C 语言 数据结构之双向链表
- Apache Phoenix数据类型
- BZOJ2216 [Poi2011]Lightning Conductor
- 二叉树的建立和遍历
- linux程序分析工具介绍-ldd,nm
- Jersey框架初体验
- AngularJS
- Spring 源码梳理(六) BeanNameAware和BeanFactoryAware
- VS2010/MFC编程入门之五十二(Ribbon界面开发:创建Ribbon样式的应用程序框架)