本文共 1309 字,大约阅读时间需要 4 分钟。
用data数组存储数据, 为了 方便 从下表为1开始存储。
用数组right存储当前序列每一元素的的下一位置的索引。
#include#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;//初始数据的索引 } else right[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; } else return 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; }
转载地址:http://faimi.baihongyu.com/