线性表的遍历c语言创建
时间: 2023-05-27 18:02:23 浏览: 98
typedef struct node{
int data;
struct node* next;
}Node, *LinkList;
//创建链表
LinkList CreateList(int n){
LinkList head, p;
head = (LinkList)malloc(sizeof(Node));
head->next = NULL;
int i;
for(i = n; i > 0; i--){
p = (LinkList)malloc(sizeof(Node));
scanf("%d", &p->data);
p->next = head->next;
head->next = p;
}
return head->next;
}
//遍历链表
void TraversalList(LinkList p){
while(p != NULL){
printf("%d ", p->data);
p = p->next;
}
}
int main(){
LinkList p = CreateList(5);
TraversalList(p);
return 0;
}
相关问题
线性表的建立及遍历C语言
线性表是一种基础的数据结构,它是由一组相同类型的元素按照一定的顺序排列构成的序列。在C语言中,主要有数组和链表两种方式来实现线性表。
**建立线性表:**
1. **数组实现** - 使用动态数组(`malloc`分配内存)或静态数组创建线性表。例如:
```c
#include <stdlib.h>
int arr[10]; // 静态数组,大小固定
int* dynamicArr = (int*)malloc(10 * sizeof(int)); // 动态分配内存
```
2. **链表实现** - 使用结构体表示节点,并通过指针链接形成链表。例如:
```c
typedef struct Node {
int data;
struct Node* next;
} Node;
Node* head = NULL; // 创建头结点
```
**遍历线性表:**
1. **数组遍历** - 使用for循环或while循环,从第一个元素开始访问每个元素。
```c
for (int i = 0; i < sizeof(arr) / sizeof(arr[0]); i++) {
printf("%d ", arr[i]);
}
```
2. **链表遍历** - 可以使用递归或迭代的方式遍历链表,如迭代:
```c
void printList(Node* node) {
while (node != NULL) {
printf("%d ", node->data);
node = node->next;
}
}
```
用c语言编写功能菜单程序,实现初始化、线性表遍历、插入、删除4个基本操作
以下是一个简单的基于控制台的线性表程序,实现了初始化、遍历、插入和删除操作:
```c
#include <stdio.h>
#include <stdlib.h>
#define MAX_SIZE 100 // 线性表最大长度
typedef struct {
int data[MAX_SIZE];
int length;
} List;
void init(List *list) {
list->length = 0;
printf("线性表已初始化\n");
}
void traverse(List *list) {
printf("线性表元素:");
for (int i = 0; i < list->length; i++) {
printf("%d ", list->data[i]);
}
printf("\n");
}
void insert(List *list) {
if (list->length == MAX_SIZE) {
printf("线性表已满,无法插入\n");
return;
}
int pos, value;
printf("请输入要插入的位置和值(用空格隔开):");
scanf("%d %d", &pos, &value);
if (pos < 1 || pos > list->length + 1) {
printf("插入位置无效\n");
return;
}
for (int i = list->length; i >= pos; i--) {
list->data[i] = list->data[i - 1];
}
list->data[pos - 1] = value;
list->length++;
printf("插入成功\n");
}
void remove(List *list) {
if (list->length == 0) {
printf("线性表已空,无法删除\n");
return;
}
int pos;
printf("请输入要删除的位置:");
scanf("%d", &pos);
if (pos < 1 || pos > list->length) {
printf("删除位置无效\n");
return;
}
for (int i = pos - 1; i < list->length - 1; i++) {
list->data[i] = list->data[i + 1];
}
list->length--;
printf("删除成功\n");
}
int main() {
List list;
int choice;
init(&list);
while (1) {
printf("请选择操作:\n");
printf("1. 遍历线性表\n");
printf("2. 插入元素\n");
printf("3. 删除元素\n");
printf("4. 退出程序\n");
printf("请输入操作编号:");
scanf("%d", &choice);
switch (choice) {
case 1:
traverse(&list);
break;
case 2:
insert(&list);
break;
case 3:
remove(&list);
break;
case 4:
printf("程序已退出\n");
exit(0);
default:
printf("输入无效\n");
}
}
return 0;
}
```
程序中使用了一个结构体来表示线性表,并定义了四个基本操作的函数。在主函数中,使用一个无限循环来接收用户的操作选择,并调用相应的函数来处理。如果用户输入了无效的操作编号,则会提示输入无效。如果要退出程序,可以选择编号为4的操作。
阅读全文