双向链表的基本操作
来源:互联网 发布:mac部分变成英文 编辑:程序博客网 时间:2024/05/21 03:26
#include <stdio.h>#include <stdlib.h>typedef struct List{ struct List *next,*prev; int item;}List,*link;link init(); //链表的初始化link headinsert(); //每次在链表的头部添加新结点link orderinsert(); //创建一个顺序的链表link delete(link ,int); //在链表中找到元素并删除void show(link );int main(){ List *p,*q,*L; printf("头插入法创建双向链表: \n"); p = headinsert(); show(p->next); printf("创建非降序双向链表: \n"); q = orderinsert(); show(q->next); printf("删除指定元素: \n"); L = delete(q->next,20); show(L); return 0;}link init(){ List *st = malloc(sizeof(*st)); st->next = NULL; st->prev = NULL; return st;}link headinsert(){ int x; List *st; st = init(); while(scanf("%d",&x) != EOF) { st->item = x; List *p = malloc(sizeof(*p)); st->prev = p; p->next = st; p->prev = NULL; st = p; } return st;}link orderinsert(){ int x; List *head,*st; st = init(); head = st; while(scanf("%d",&x) != EOF) //顺序输入数据 { List *q = malloc(sizeof(*q)); q->item = x; st->next = q; q->prev = st; q->next = NULL; st = st->next; } return head;}link delete(link st,int a){ List *p,*t; int i = 0; p = st; while(st->next != NULL) { if(st->item == a) { st->prev->next = st->next; st->next->prev = st->prev; t = st->next; free(st); st = t; i++; break; } else st = st->next; } if(!i) printf("链表中没有此元素:%d!",a); return p;}void show(link st){ int N = 0; while(st->next != NULL) { printf("%5d",st->item); st = st->next; N++; } printf("\n"); printf("链表中元素个数为%d\n",N);}
0 0
- 双向循环链表的基本操作
- 双向链表的基本操作
- 双向链表的基本操作
- 双向链表的基本操作
- 双向链表的基本操作
- 双向循环链表的基本操作
- 双向链表的基本操作
- 双向链表的基本操作
- 双向循环链表的基本操作
- 双向链表的基本操作
- 双向链表的基本操作
- 双向链表的基本操作
- 双向链表的基本操作实现
- 双向循环链表的基本操作
- 双向链表的基本操作
- 双向链表的基本操作
- 双向链表的基本操作-数据结构
- 双向链表的基本操作
- CSS实现鼠标悬停图片时的边框变色效果
- 嵌入式工具复习汇总(1)
- Codeforces Round #297 (Div. 2)E. Anya and Cubes
- ALLen博客初始化
- thenao 安装
- 双向链表的基本操作
- 简单的log4j
- LevelDb 阅读遇到的问题记录
- c语言中函数指针与指针函数的区别
- unity3d开源Ultimate MMORPG插件技术文档渣翻译第4页
- Android的Animation之LayoutAnimation使用方法
- available bandwidth paper(2)
- java基础——构造函数小知识点
- ios内存管理