C语言顺序表和单链表
一、顺序表的创建、删除和插入
#define _CRT_SECURE_NO_WARNINGS 1 #include<stdio.h> struct sqlist { int date[10]; int length; }; void InitList(sqlist& L) { for (int i = 0;i < 10;i++) { L.date[i] = 0; } L.length = 0; } void charu(sqlist& L) { for (int j = 0;j < 5;j++) { scanf("%d", &L.date[j]); L.length++; } } void ListInsert(sqlist& L, int i, int e) { for (int k = L.length;k >= i;k--) { L.date[k] = L.date[k - 1]; } L.date[i - 1] = e; L.length++; } void print(sqlist& L) { for (int i = 0;i < L.length;i++) { printf("%d ", L.date[i]); } printf("\n"); } void ListDelete(sqlist& L, int i, int e) { for (int j = i;j < L.length;j++) { L.date[j-1] = L.date[j]; } L.length--; } int main() { sqlist L;//创建顺序表L InitList(L);//初始化顺序表 shuru(L);//输入值 ListInsert(L, 3, 3);//插入值 print(L);//打印 ListDelete(L, 3, 3);//删除值 print(L); return 0; }
以上操作分别实现了对顺序表的创建,插入,删除和打印
二、单链表的创建、删除、增加和输出
#define _CRT_SECURE_NO_WARNINGS 1 #include<stdio.h> #include<stdlib.h> struct ListNode { int num; struct ListNode* next; }; struct ListNode* create(struct ListNode* head) { struct ListNode * p1, * p2; p1 = p2 = (struct ListNode*)malloc(sizeof(struct ListNode)); scanf("%d", &p1->num); while (p1->num!=0){ if (head == NULL) { head = p1; } else { p2->next = p1; } p2 = p1; p1= (struct ListNode*)malloc(sizeof(struct ListNode)); scanf("%d", &p1->num); } p2->next = NULL; free(p1); return head; } void print(struct ListNode* head) { while (head != NULL) { printf("%d ", head->num); head = head->next; } } int main() { struct ListNode* head=NULL; head=create(head);//创建链表 print(head);//输出链表 return 0; }
以上操作为创建链表并打印,效果如下:
现在增加插入操作
#define _CRT_SECURE_NO_WARNINGS 1 #include<stdio.h> #include<stdlib.h> struct ListNode { int num; struct ListNode* next; }; struct ListNode* create(struct ListNode* head) { struct ListNode * p1, * p2; p1 = p2 = (struct ListNode*)malloc(sizeof(struct ListNode)); scanf("%d", &p1->num); while (p1->num!=0){ if (head == NULL) { head = p1; } else { p2->next = p1; } p2 = p1; p1= (struct ListNode*)malloc(sizeof(struct ListNode)); scanf("%d", &p1->num); } p2->next = NULL; free(p1); return head; } void print(struct ListNode* head) { while (head != NULL) { printf("%d ", head->num); head = head->next; } printf("\n"); } struct ListNode* insert(struct ListNode* head,int i) { struct ListNode* p1,*p2,*p; p1 =p2= head; for (int j = 1;j < i;j++) { p2 = p1; p1 = p1->next; } p= (struct ListNode*)malloc(sizeof(struct ListNode)); printf("请输入插入的数:"); scanf("%d", &p->num); p2->next = p; p->next = p1; return head; } int main() { struct ListNode* head=NULL; int a, b; head=create(head); print(head); printf("请输入插入位置:"); scanf("%d", &a); head = insert(head,a);//插入新数据 print(head); return 0; }
效果如下:
现增加删除操作
#define _CRT_SECURE_NO_WARNINGS 1 #include<stdio.h> #include<stdlib.h> struct ListNode { int num; struct ListNode* next; }; struct ListNode* create(struct ListNode* head) { struct ListNode * p1, * p2; p1 = p2 = (struct ListNode*)malloc(sizeof(struct ListNode)); scanf("%d", &p1->num); while (p1->num!=0){ if (head == NULL) { head = p1; } else { p2->next = p1; } p2 = p1; p1= (struct ListNode*)malloc(sizeof(struct ListNode)); scanf("%d", &p1->num); } p2->next = NULL; free(p1); return head; } void print(struct ListNode* head) { while (head != NULL) { printf("%d ", head->num); head = head->next; } printf("\n"); } struct ListNode* insert(struct ListNode* head,int i) { struct ListNode* p1,*p2,*p; p1 =p2= head; for (int j = 1;j < i;j++) { p2 = p1; p1 = p1->next; } p= (struct ListNode*)malloc(sizeof(struct ListNode)); printf("请输入插入的数:"); scanf("%d", &p->num); p2->next = p; p->next = p1; return head; } struct ListNode* Delete(struct ListNode* head, int i) { struct ListNode* p1, * p2; p1 = p2 = head; while (p1!=NULL&&p1->num != i) { p2 = p1; p1 = p1->next; } if (p1 == head) { head = head->next; } else { p2->next = p1->next; } return head; } int main() { struct ListNode* head=NULL; int a, b; head=create(head); print(head); printf("请输入插入位置:"); scanf("%d", &a); head = insert(head,a); print(head); printf("请输入删除值:"); scanf("%d", &b); head = Delete(head, b);//删除数据 print(head); return 0; }
效果如下:
因此,我们便实现了对单链表的创建、删除、增加和输出
总结
关于C语言数据结构之顺序表和单链表的文章就介绍至此,更多相关C语言顺序表和单链表内容请搜索编程宝库以前的文章,希望大家多多支持编程宝库!
C语言指针可以代替数组使用 1、数组本质数组是多个元素的集合,在内存中分布在地址连续的单元中,因此可以通过其下标访问数组的不同数组。例如:下面展示一些char s[3] = "0x1" ...