❶ c语言双向链表
#include "stdio.h"
#include "stdlib.h"
typedef int ElemType;//元素类型
typedef struct DuLNode
{//双向链表
ElemType data;
struct DuLNode *prior, *next;
}DuLNode,*DuLinkList;
int Create(DuLinkList &L)
{//建立双向链表
DuLinkList p,q;
ElemType n,i;
L = (DuLinkList) malloc (sizeof(DuLNode));
L->next = NULL;
q = L;
printf("输入数据个数:");
scanf("%d",&n);
printf("输入数据元素:");
for ( i = 0; i < n; i++)
{
p = (DuLinkList) malloc (sizeof(DuLNode));
scanf("%d",&p->data);//插入数据
p->prior = q;
q->next = p;
p->next = 0;
q = q->next;
}
return 1;
}
int Visit(DuLinkList &L)
{//遍历双向链表
DuLinkList p;
p = L->next;
printf("双向链表为:");
while (p)
{
printf("%4d",p->data);
p = p->next;
}
printf("\n");
return 1;
}
int Clear(DuLinkList &L)
{
DuLinkList p;
p = L->next;
while(p)
{
L->next = p->next;
free(p);
p = L->next;
}
return 1;
}
main()
{
int i,e,s,num;
char c='y';
DuLinkList L;
Create(L);
Visit(L);
while (c=='y')
{
printf("\n\n\n1.双向链表插入元素\n2.双向链表中删除元素\n");
printf("3.判断双向链表元素是否对称\n");
printf("4.双向链表中奇数排在偶数前面\n");
printf("5.建立递增链表并有序插入元素\n\n");
printf("选择需要的操作\n\n");
scanf("%d",&num);
switch(num)
{
case 1:
printf("输入插入元素位置以及元素:\n");
scanf("%d%d",&i,&e);
ListInsert(L, i, e);
Visit(L);
break;
case 2:
printf("输入删除元素位置:");
scanf("%d",&i);
Delete(L,i,s);
printf("删除的元素为:%d\n",s);
Visit(L);
break;
case 3:
if(Same(L)) printf("链表对称\n");
else printf("链表不对称\n");
break;
case 5:
printf("清空原链表,建立递增链表:\n");
XCreate(L);
Visit(L);
break;
case 4:
printf("奇数放在偶数前面:\n");
Jiou(L);
Visit(L);
break;
}
printf("继续操作(y/n):\n");
scanf("%s",&c);
}
}
❷ C语言定义双向链表结构体
struct node
{
DataType data;
node * prior;
node * next;
};
其中prior指针用来存储前一节点的地址,next用来存储后一节点的地址,就比单项链表多了一个指针而已,可以添加其它自定义的数据成员
❸ c语言数据结构(双向链表排序)
#include<stdio.h>
#include<malloc.h>
#define ElemType int
int count=0;
typedef struct DulNode
{
ElemType data;
DulNode *prior;
DulNode *next;
}DulNode,*DulLinkList;
//初始化链表,结束后产生一个头结点指针
void InitDLList(DulLinkList *L)
{
(*L)=(DulLinkList)malloc(sizeof(DulNode));
(*L)->next=*L;
(*L)->prior=(*L)->next;
}
//对链表进行插入操作
void ListInsert(DulLinkList *L)
{
int i=0,n;
ElemType temp;
DulNode *s,*p;
p=(*L)->next;
printf("请输入插入元素数量:\n");
scanf("%d",&n);
count=n;
printf("请输入%d个自然数\n",n);
while(i<n)
{
scanf("%d",&temp);
s=(DulNode*)malloc(sizeof(DulNode));
s->data=temp;
while((p!=(*L))&&(p->data<temp))//查找所要插入的位置
{
p=p->next;
}
s->prior=p->prior;//新节点的插入
s->next=p;
p->prior->next=s;
p->prior=s;
p=(*L)->next;//将指针回指到链表第一个非空节点,主要是为了下次查找插入位置
i++;
}
}
void Display(DulLinkList L)
{
DulNode *p;
p=L->next;
printf("双向链表中的数据为:\n");
while(p!=L)
{
printf("%d ",p->data);
p=p->next;
}
printf("\n");
}
void Sort(DulLinkList *L)
{
ElemType temp;
DulNode *p,*q;
p=(*L)->next;
q=(*L)->prior;
if(count%2!=0)
q=q->prior;
p=p->next;
while(p!=q)
{
temp=p->data;
p->data=q->data;
q->data=temp;
p=p->next;
if(p!=q) //第二题只需交换节点数据
q=q->prior;//这几个if else语句需要仔细
else
break;
if(p!=q)
p=p->next;
else
break;
if(p!=q)
q=q->prior;
else
break;
}
}
void main()
{
DulLinkList L;
InitDLList(&L);//初始化链表
ListInsert(&L);//顺序插入数据
Display(L);//显示结果
Sort(&L);//第二题操作
Display(L);//第二题输出结果
}
❹ 从C语言的角度来解释什么是抽象数据类型
简单的说一下吧,所谓抽象数据类型ADT,是指 我们在逻辑上定义的 一种 数据类型。
如你所知道的,计算机内,无论是内存还是外存,都只是一组二进制的数位而已。
大多数时候,比如我们所熟知的 Char类型、Int类型等等,都是一组已经定义好的二进制数位。
所谓定义好,是指,在这一组数位中,如Char类型,8位,即一组8个二进制数位,我们如何标识和处理每一位,以及解读每一位所代表的意义。
你学过C,应该知道ASCII码,和二进制计数。 Char的这个数据类型的含义就是说 以二进制计数 算出对应的数值, 再以ASCII码为标准,解读出这8位二进制位中所表示的字母。
事实上,我想说的是,这就是一个基本的抽象数据类型了。
当然,ADT不仅仅是一组数位的定义,他还包括一组定义在这个结构上的一组操作。
struct这个方法,在后来的演变中,成为了C++和其他高等语言中的类(class)。
我知道,这样讲你肯定不是很明白,但关于这个东西,有一门课程叫做《数据结构》,中间详细叙述了所有有关 抽象数据类型的概念 。
其中,有一本 《数据结构C语言版》清华大学出版社 严蔚敏着 的教材,是所有计算机专业学生必修的一门课程。你可以看看。
祝好运!
如果对您有帮助,请记得采纳为满意答案,谢谢!祝您生活愉快!
❺ C语言中,双链表、单链表、顺序表有什么区别分别有什么用途简单来说,就是这三个表分别适用于什么情
链表是通过指针连接的表吧 就是在内存中不是连续的 单链表每一个节点包含一个数据和一个指向下一个节点的指针 双链表比单链表多一个指向上一个节点的指针 就是说单链表只能沿着一个方向走 双链表可以沿任意方向走 顺序表应该是在内存中顺序存储的表吧
❻ 抽象数据类型与C语言!!怎么感觉《数据结构(C语言)》中链表等的操作比C语言的还要麻烦
以后工作什么的我就不知道了 但是我跟别人去过面试 里面很多题目都是数据结构的
自我感觉数据结构其实就是定义自己的需要的数据类型,因为在现在中基本的数据类型不够用,链表的操作主要是别让数据的指针丢失不然你的数据就找不到了。反正个人认为挺重要的基础东西,努力学吧 多拿书上的代码抄几遍,有人说代码百遍其义自现
我也菜鸟没办法解释的更好
❼ C语言双链表,定义一个结构体指针变量
首先,你要明白
p的类型
DLinklist
*
p;
指针p指向的类型是DLinklist
他存放的是这个指向这个
结构体
的地址
p->next->next
是指向下一个节点!
❽ c语言抽象数据类型的插入、删除问题
完全可以。但是抽象,一般不这么用。这样就和链表差不多了
❾ c语言什么单向链表,什么是双向链表
单向就是, 只可以从头到尾按指针向一个方向遍历,不可以返过来。
双向就是,任何时候,从前往后,还是从后往前都可以遍历,两个方向都有指针
双向循环, 就是一个链表头尾相连,指针也是双方向的,可以从头遍历到尾,再回到头,或者从尾到头遍历,再回到尾