当前位置:三九宝宝网 → 宝宝教育 → 教学论文 → 正文

C语言定义一个双向链表不是双向循环列表编程实现其中两个节

更新:03-17 整理:39baobao.com
字体:

[用C语言实现链表的算法]这个是我们数据结构上机实验的链表问题, #include<stdio.h> #include<malloc.h> #define LEN sizeof(LinkNode) typedef int Datatype; typedef int Status; typedef struct...+阅读

#include

struct TNode

{

TNode pre;

TNode next;

int seq;

};

int main()

{

TNode pNode[5], temp;

int n = 5, i = 0;

//链表初始化

for (i; i < n; i++)

{

pNode[i].next = pNode[i+1];

if ( i != 0)

{

pNode[i].pre = pNode[i-1];

}

pNode[i].seq = i;

}

// 链表节点交换,交换3和4

temp = pNode[3];

交换,再将3的前和后,4的前和后重新赋值

return 0;

}

C程序编写:输出双链表

这是以前一个网友写的,看你是否有用。 # ifndef _DList_H # define _DList_H #include #include typedef struct node *ptrnode; typedef ptrnode list; typedef ptrnode position; typedef int elementtype; struct node { elementtype element; position front; position next; }; list create_dlist(void); /*建立空链表*/ int isempty(list L); /*检测是不是空表*/ int islast_dlist(position p); /*检测当前位置是不是表的最后*/ position find_dlist(elementtype x, list L); /*在表中查找元素X的位置返回指针*/ int deletenode_dlist(elementtype x, list L); /*删除一个结点,结点元素为X*/ int insertafter(elementtype x, list L, position p); /*在结点P后插入元素X*/ int delete_dlist(list L); /*删除整个表*/ position frist_dlist(list L); /*返回指向第一个元素的指针*/ elementtype retrieve(position p, list L); /*返回位置P的元素*/ void printdlist(list L); /*输出表L*/ void printnode(position p); /*输出结点*/ void reverseprint_dlist(list L); /*反向输出双链表*/ list create_dlist() { list L = NULL; if ( (L = (struct node*)malloc(sizeof(struct node))) != NULL) { L->next = NULL; L->front = NULL; } return L; } int isempty(list L) { if(NULL != L) { printf("can't find list\n"); return 0; } else { return L->next == NULL ? 0 : 1 ; } } int islast_dlist(position p) { return p->next == NULL ? 0 : 1 ; } position find_dlist(elementtype x, list L) { position p = NULL; p = L->next; while(p->element != x) { p = p->next; } return p; } int deletenode_dlist(elementtype x, list L) { position p = NULL; position temp = NULL; p = find_dlist(x,L); if(NULL == p) return 0; else { temp = p; p->front->next = p->next; if(NULL != p->next) { p->next->front = p->front; } free(temp); return 1; } } int insertafter(elementtype x, list L, position p) { position newnode = NULL; if(NULL == L) { printf("can't find list\n"); return 0; } else { if((newnode = (struct node*)malloc(sizeof(struct node))) == NULL) printf("no memory!!\n"); else { newnode->element = x; newnode->next = p->next; p->next = newnode; newnode->front = p; if(NULL != newnode->next) { newnode->next->front = newnode; } } return 1; } } int delete_dlist(list L) { position p = NULL; position p1 = NULL; p = L; do { p1 = p->next; free(p); p = p1; } while(NULL != p); return 0; } position frist_dlist(list L) { if(NULL == L) { printf("the list is empty!\n"); return L; } return L->next; } elementtype retrieve(position p, list L) { return p->element ; } void print_dlist(list L) { position p = NULL; p = L; do { printnode(p->next); p = p->next; } while(islast_dlist(p)); } void printnode(position p) { printf("%3d\n",p->element); } void reverseprint_dlist(list L) { position p = NULL; p = L; while(islast_dlist(p)) { p = p->next; } while(p->front != NULL) { printnode(p); p = p->front; } } int main() { int i = 0; position p = NULL; list L = NULL; L = create_dlist(); if(NULL != L) { for(i = 0; i

C语言求双向链表的简单例子

一下是含指针的代码,什么是不含的呀?不含指针只有用数组来做,但是完全无法成为一个双向链表啊,可以说的明白一些吗?

下面就是把一些数据保存在双向链表中,然后打印输出

#include

#include

typedef struct link

{

link *next;

link *pre;

int num;

}link,*Llink;

/*构建链表,长度为num*/

Llink build(int num)

{

int cun=0;

int i=0;

printf("输入要保存的第%d个数据:\n",i+1);

scanf("%d",&cun);

Llink head=(Llink)malloc(sizeof(link));

head->num=cun;

Llink x=(Llink)malloc(sizeof(link));

x=head;

for(i=1;i

{

printf("输入要保存的第%d个数据:\n",i+1);

scanf("%d",&cun);

Llink y=(Llink)malloc(sizeof(link));

y->num=cun;

x->next=y;

y->pre=x;

x=y;

}

head->pre=x;

x->next=head;

return(head);

}

/*打印头结点为head所指向的节点的链表*/

void output(Llink head)

{

Llink x=(Llink)malloc(sizeof(link));

x=head;

do

{

printf("%d\n",x->num);

x=x->next;

}

while(x!=head);

}

void main()

{

int num;

printf("输入要保存的数据的个数:\n");

scanf("%d",&num);

Llink head=build(num);

printf("保存的数据为:\n");

output(head);

}

本文地址:https://www.39baobao.com/show/29_48733.html

以上内容来自互联网,请自行判断内容的正确性。若本站收录的信息无意侵犯了贵司版权,请联系我们,我们会及时处理和回复,谢谢.

以下为关联文档:

怎样用C语言编程实现读取一个C程序统计里面的函数个数个人意见: 首先你的思路是有缺陷的, 如一楼所说。 其次,这个问题的实现,可以借鉴多项式处理的思路。 从行首开始读取, 特例:判断行首是否为"main",如果是,则算一个函数。 一般情况: 读...

C语言定义一个函数实现两个集合的相加运算#include #include #include #define N 7 typedef enum { add, nul, sub, div1, yu, l, r }OP; int a[N][N] = { { 0, 0, -1, -1, -1, 1, 2 }, { 0, 0, -1, -1, -1, 1, 2 },...

c语言编程循环这个曾经困扰我一整天。留名。 #include main() {int a,b,c,d=0; for(a=1;a #include <stdio.h> int main() { int a,b,c=0,d=0; for(a=1;a<=10000;a++){ { c = 0; for(b=1;...

C语言写一个函数用来实现左右循环移位#include <stdio.h> void fun(int &amp;value,int n,int dire) { if(dire==0) return; int x=1<<(sizeof(int)*8-1); int temp; int i; if(dire>0) { for(i=0;i<n;i++) { te...

帮忙做道C语言的题双向链表的排序#includetypedef struct Link/*双向链表结构体*/{ int data; struct Link *lift; struct Link *right;}linkx,*linky;linky Init();/*建立双向链表*/void PrLink(linky p);/*输...

求高手做个c语言设计一个双向链表的排序#includetypedef struct Link/*双向链表结构体*/ { int data; struct Link *lift; struct Link *right; }linkx,*linky; linky Init();/*建立双向链表*/ void PrLink(linky p)...

c语言课程设计双向链表排序#includetypedef struct Link/*双向链表结构体*/{ int data; struct Link *lift; struct Link *right;}linkx,*linky;linky Init();/*建立双向链表*/void PrLink(linky p);/*输...

C语言编程以单循环链表作为存储结构设计一个解决约瑟夫问题的算#include "stdio。 h" typedef struct point { int No; struct point *next; }LNode,*LinkList; int n,m,k; LinkList create() /*生成单向循环链表并返回*/ {int i; LinkList...

c语言动态链表如何实现排序c语言动态链表如何实现排序,利用链表怎样实现数据的插入排序统计更改等等:typedef struct node{ int data; struct node *next; }node; node *create() { node *head,*p,*q; i...