用数组模拟链表操作 C实现~
来源:互联网 发布:java中循环遍历数组 编辑:程序博客网 时间:2024/06/07 20:50
用data数组存储数据, 为了 方便 从下表为1开始存储。
用数组right存储当前序列每一元素的的下一位置的索引。
#include<stdio.h>#define NOTEXIST -1int right[101], data[101];void init_linklist(int n){int i, t, len;for(i = 1; i <= n; i++ ){scanf("%d",&data[i]);}for(i = 1; i <= n; i++ ){if(i != n){right[i] = i+1;//初始数据的索引} elseright[i] = 0;}} int find_pre(int x)//找当前位置的前一位置并返回{int t = 1;while(right[t] != 0 && data[right[t]] != x){t = right[t];}if(right[t] == 0){return NOTEXIST;}elsereturn t;}// 由于数组大小固定不可变 所以 这里不能插入到第一个位置void insert(int *n, int pos, int x)//插入元素到pos 前一位置 {(*n)++;int len = *n;data[len] = x;int t = find_pre(data[pos]);printf("t = %d\n",t); right[len] = right[t];right[t] = len; }int delete_data(int head, int x)//删除 元素 x {if(x == data[1]){//处理 删除的是第一个元素的情况 head = head+1;return head;}int t = find_pre(x);//找到 该元素的前一个位置 if(t == -1){return NOTEXIST;}int tmp = right[t]; //删除操作 right[t] = right[tmp];right[tmp] = -1;return head;}void print_list(int head)//打印 链表 {int t = head;while( t != 0){printf("%d ",data[t]);t = right[t];}}int main(){int n, head;head = 1;scanf("%d",&n);init_linklist(n);int x;scanf("%d",&x);insert(&n, 2, x);//head = delete_data(head, 5);print_list(head); return 0;}
阅读全文
0 0
- 用数组模拟链表操作 C实现~
- C/C++:使用数组模拟链表
- php模拟链表操作数组
- 用数组模拟栈操作
- 用数组模拟栈操作
- 用C语言数组实现位操作(位数组)
- C语言模拟实现字符串操作函数
- 用数组模拟链表
- 用数组模拟链表
- 用数组模拟链表
- 用数组实现链表(C++)
- 数组模拟实现邻接表
- 【C语言】模拟实现链表
- 数组实现的线性表基本操作[C]
- 数组模拟链表
- 数组模拟链表
- C实现链表操作
- C语言数组实现栈操作
- mybatis动态表名遇见There is no getter for property named 'tableName' in 'class java.lang.String'
- yum使用代理的设置
- 比特变换器 Bits Equalizer,SWERC 2012 ,UVA12545
- java基础学习总结——数组
- SQL调优 EXPLAINE
- 用数组模拟链表操作 C实现~
- Qt之界面实现技巧
- 理解RESTful架构
- 新手上路系列10:信号量与信号通信
- NLTK01 《NLTK基础教程--用NLTK和Python库构建机器学习应用》
- Java 内存分配全面浅析
- 由字符串反序列化成实体类,转为实体类的时候不改变属性的排序
- coding.net 配置SSH公钥
- iOS KVC和KVO介绍