如何实现双重连接列表,实现英文列表ADT?

实现双重连接列表,实现英文列表ADT。

需要支持以下四个运算(假设位置从第一个开始)

- add(list, position, item):在list的position的位置增加item。 

- delete(list, position):删除list的position位置中的item。
- get(list, position):返回list的 position 位置中的item值。

- print(list): 按list中存储的顺序输出list中的所有item,没有空格

 

如果position信息无效,则在屏幕上输出错误消息“invalid position”,忽略相应的运算。

 

输入的描述( 参考下面的输入输出例子)

- 每条运算的内容逐条输入,每条运算的种类、位置、项目依次输入。
- 运算的种类:运算名称的最前英文为大写字母(A、D、G、P)。
- 位置:正数
- 项目:英文(大写、小写都可以)

例子1:

输入

5 				↦ 计算的个数: 5
A 1 S			↦ add(list, 1, 'S')
A 2 t			↦ add(list, 2, 't')
A 3 r			↦ add(list, 3, 'r')
A 3 a			↦ add(list, 3, 'a')
P				↦ print(list)

 

输出

Star			↦ 第5次运算(P)输出

输入

9 				↦ 计算的个数: 9
A 1 D			↦ add(list, 1, 'D')
A 2 a			↦ add(list, 2, 'a')
A 3 y			↦ add(list, 3, 'y')
D 1 			↦ delete(list, 1)
P				↦ print(list)
G 3		   ↦ get(list, 3)
A 1 S			↦ add(list, 1, 'S')
P				↦ print(list)
G 3 			↦ get(list, 3)

输出
ay              		↦ 第5次运算(P)输出
invalid position		↦ 第6次运算(G 3)的输出
Say           		  	↦ 第8次运算(P)的输出
y               		↦ 第9次运算(G 3)的输出

你的难点是啥呢?是哪个操作不会呢

给你说说大概的思路吧

1. 首先是要根据操作码,决定要执行的操作,这个是 switch 或者 if else 也是可以的。

2. 然后具体的操作都是对链表进行操作的,add,就是在链表的任意位置新增一个节点。

3. delete 就是删除链表任意的一个节点

4. get 就是获取任意的节点

5. print 就是打印所有的节点。

// 这个是节点的结构体定义
typedef struct ListNode{
    // 节点保存的值
    char ch;
    // 下一个节点
    struct ListNode *next;
};

你要定义一个头节点,然后每次遍历到对应的位置,做相应的操作。遍历的操作如下。

void opA() {
    while (i < num, cur.next != null) {
        // 创建一个新的节点 new
        // 将 pre.next 指向新的节点
        // 将 new.next = cur
    }
    printf("invalid position")
}