使用尾插法创建一个单链表(表中数据元素为字符型以我的昵称为例)
1.输出链表中的所有数据元素
2.在链表中查找第3个位置的字符
3.然后在链表中姓氏(我代码中的姓就是“奋”)后面位置插入字符“Y”
4.删除链表中第2个位置上的数据元素
5输出链表中所有的数据元素
#include <stdio.h>
#include <malloc.h>
typedef struct node {
char data;
struct node *next;
}node;
//初始化
node *InitList() {
node *L;
L = (node*)malloc(sizeof(node));
L->next = NULL;
return L;
}
//尾插法建立链表
void CreateListT(node *L) {
node *s, *r;
char c;
int flag = 1;
r = L;
while (flag) {
c = getchar();
if (c != '$') {
s = (node *)malloc(sizeof(node));
s->data = c;
s->next = NULL;
r->next = s;
r = s;
}
else
flag = 0;
}
printf("建立链表操作成功\n");
}
//输出链表元素
void DispList(node *L) {
node *p;
p = L->next;
while (p != NULL) {
putchar(p->data);
p = p->next;
}
}
//求链表的长度
int ListLength(node *L) {
node *p = L->next;
int j = 0;
while (p != NULL) {
p = p->next;
j++;
}
return j;
}
//按位置查找
void GetData(node *L, int i) {
node *p = L;
int j = 0;
if (i<1 || i>ListLength(L))
printf("位置错误,链表中没有该位置!");
while (p->next != NULL && j < i) {
p = p->next;
j++;
}
if (j == i)
printf("在第%d位上的元素值为%c!\n", i, p->data);
}
//插入
void InsList(node *L, int i, char e) {
int k = 0;
node *p, *s;
p = L;
if (i<1 || i>ListLength(L) + 1)
printf("位置错误,链表中没有该位置!");
while (p->next != NULL && k < i-1) {
p = p->next;
k++;
}
if (p != NULL) {
s = (node*)malloc(sizeof(node));
s->data = e;
s->next = p->next;
p->next = s;
printf("插入元素成功\n");
}
else
printf("插入元素失败\n");
}
//删除
void DelList(node *L, int i) {
int j = 0;
char e;
node *p = L, *s;
while (p->next!=NULL&&j<i-1) {
p = p->next;
j++;
}
if (p->next != NULL && j == i - 1) {
s = p->next;
e = s->data;
p->next = s->next;
free(s);
printf("删除第%d位上的元素%c成功\n", i, e);
}
else
printf("删除结点位置错误,删除失败\n");
}
void main() {
node* L;
int i;
char e;
L = InitList();
printf("请输入要链表的数据元素,并以¥结束:");
CreateListT(L);
printf("建立后的线性表为:\n");
DispList(L);
printf("\n");
ListLength(L);
printf("请输入要查找的位置:");
scanf("%d", &i);
GetData(L,i);
printf("请输入要插入的位置:");
scanf("%d", &i);
printf("请输入要插入的元素值:");
scanf("%c", &e);
e = getchar();
InsList(L,i,e);
DispList(L);
printf("\n");
printf("请输入要删除的位置:");
scanf("%d", &i);
DelList(L, i);
DispList(L);
printf("\n");
}
运行结果