请用C语言实现一个对单链表进行基本操作的系统,主要包括表的创建、输入、查询、取值、插入、删除和输出的操作
时间: 2023-12-21 09:03:34 浏览: 22
这是一个基本的单链表操作系统,包括表的创建、输入、查询、取值、插入、删除和输出的操作:
```
#include<stdio.h>
#include<stdlib.h>
typedef struct node{
int data;
struct node *next;
}Node, *LinkedList;
LinkedList createList();
LinkedList inputList(LinkedList);
void printList(LinkedList);
int searchList(LinkedList, int);
int getValue(LinkedList, int);
LinkedList insertList(LinkedList, int, int);
LinkedList deleteList(LinkedList, int);
int main(){
LinkedList list;
int choice, value, index, result;
list = createList();
printf("请选择操作:\n");
printf("1. 输入链表\n");
printf("2. 查询元素\n");
printf("3. 取值\n");
printf("4. 插入元素\n");
printf("5. 删除元素\n");
printf("6. 输出链表\n");
printf("0. 退出程序\n");
while(1){
printf("请输入操作编号:");
scanf("%d", &choice);
switch(choice){
case 1: list = inputList(list); break;
case 2:
printf("请输入要查询的元素:");
scanf("%d", &value);
result = searchList(list, value);
if(result == -1) printf("元素不存在\n");
else printf("元素在链表中的位置为:%d\n", result);
break;
case 3:
printf("请输入要取值的位置:");
scanf("%d", &index);
value = getValue(list, index);
if(value == -1) printf("位置错误\n");
else printf("该位置的值为:%d\n", value);
break;
case 4:
printf("请输入要插入的位置和值:");
scanf("%d %d", &index, &value);
list = insertList(list, index, value);
break;
case 5:
printf("请输入要删除的位置:");
scanf("%d", &index);
list = deleteList(list, index);
break;
case 6: printList(list); break;
case 0: exit(0);
default: printf("输入有误,请重新输入\n"); break;
}
}
return 0;
}
LinkedList createList(){
LinkedList head = (LinkedList)malloc(sizeof(Node));
head->next = NULL;
return head;
}
LinkedList inputList(LinkedList head){
LinkedList p = head, q;
int n, i, value;
printf("请输入链表长度:");
scanf("%d", &n);
for(i=0; i<n; i++){
printf("请输入第%d个元素:", i+1);
scanf("%d", &value);
q = (LinkedList)malloc(sizeof(Node));
q->data = value;
q->next = NULL;
p->next = q;
p = q;
}
return head;
}
void printList(LinkedList head){
LinkedList p = head->next;
printf("链表元素为:");
while(p){
printf("%d ", p->data);
p = p->next;
}
printf("\n");
}
int searchList(LinkedList head, int value){
LinkedList p = head->next;
int index = 0;
while(p){
index++;
if(p->data == value) return index;
p = p->next;
}
return -1;
}
int getValue(LinkedList head, int index){
LinkedList p = head->next;
int i = 0;
while(p){
i++;
if(i == index) return p->data;
p = p->next;
}
return -1;
}
LinkedList insertList(LinkedList head, int index, int value){
LinkedList p = head, q;
int i = 0;
while(p){
i++;
if(i == index){
q = (LinkedList)malloc(sizeof(Node));
q->data = value;
q->next = p->next;
p->next = q;
return head;
}
p = p->next;
}
return head;
}
LinkedList deleteList(LinkedList head, int index){
LinkedList p = head, q;
int i = 0;
while(p->next){
i++;
if(i == index){
q = p->next;
p->next = q->next;
free(q);
return head;
}
p = p->next;
}
return head;
}
```
在此基础上,可以根据需要增加其他操作。