线性表的链式存储C语言版
2016-06-22 19:00
363 查看
#include <stdio.h> #include <malloc.h> #define N 10 typedef struct Node { int data; struct Node *next; }Node, *LinkedList; void initList(LinkedList *L); int ListInsert(LinkedList *L, int index, int e); int ListDelete(LinkedList *L, int index, int *e); void printList(LinkedList L); int main(int argc, char const *argv[]) { int e; LinkedList L=NULL; initList(&L); for (int i = 1; i <= N; ++i) { ListInsert(&L,i,i); } printList(L); for (int i = L->data; i >=1; --i) { ListDelete(&L,i,&e); printf("%d\t", e); } return 0; } void initList(LinkedList *L) { (*L) = (Node*)malloc(sizeof(Node)); (*L)->data = 0; (*L)->next = NULL; } int ListInsert(LinkedList *L, int index, int e) { if(index>(*L)->data+1 || index<=0) return -1; int i = 0; Node *p = (*L); while(p) { if(i==index-1) { Node *t = (Node*)malloc(sizeof(Node)); t->data = e; t->next = p->next; p->next = t; (*L)->data += 1; return 0; } ++i; p = p->next; } } int ListDelete(LinkedList *L, int index, int *e) { if(index<=0 || index>=(*L)->data+1) return -1; int i=0; Node* p = (*L); while(p) { if(i==index-1) { Node *q = p->next; p->next = q->next; *e = q->data; free(q); q = NULL; return 0; } ++i; p = p->next; } } void printList(LinkedList L) { Node *p = L; while(p->next) { p = p->next; printf("%d\t",p->data); } }
相关文章推荐
- 如何组织构建多文件 C 语言程序(二)
- 如何写好 C main 函数
- C#数据结构之顺序表(SeqList)实例详解
- Lua和C语言的交互详解
- Lua教程(七):数据结构详解
- 解析从源码分析常见的基于Array的数据结构动态扩容机制的详解
- C#数据结构之队列(Quene)实例详解
- C#数据结构揭秘一
- C#数据结构之单链表(LinkList)实例详解
- 关于C语言中参数的传值问题
- 简要对比C语言中三个用于退出进程的函数
- 深入C++中API的问题详解
- 基于C语言string函数的详解
- C语言中fchdir()函数和rewinddir()函数的使用详解
- C语言内存对齐实例详解
- C语言编程中统计输入的行数以及单词个数的方法
- C语言自动生成enum值和名字映射代码
- C语言练习题:自由落体的小球简单实例
- 使用C语言判断英文字符大小写的方法
- c语言实现的带通配符匹配算法