C語言數(shù)據(jù)結(jié)構(gòu)之順序表和單鏈表
一、順序表的創(chuàng)建、刪除和插入
#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;//創(chuàng)建順序表L
InitList(L);//初始化順序表
shuru(L);//輸入值
ListInsert(L, 3, 3);//插入值
print(L);//打印
ListDelete(L, 3, 3);//刪除值
print(L);
return 0;
}
以上操作分別實(shí)現(xiàn)了對順序表的創(chuàng)建,插入,刪除和打印
二、單鏈表的創(chuàng)建、刪除、增加和輸出
#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);//創(chuàng)建鏈表
print(head);//輸出鏈表
return 0;
}
以上操作為創(chuàng)建鏈表并打印,效果如下:

現(xiàn)在增加插入操作
#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("請輸入插入的數(shù):");
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);//插入新數(shù)據(jù)
print(head);
return 0;
}
效果如下:

現(xiàn)增加刪除操作
#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("請輸入插入的數(shù):");
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);//刪除數(shù)據(jù)
print(head);
return 0;
}
效果如下:

因此,我們便實(shí)現(xiàn)了對單鏈表的創(chuàng)建、刪除、增加和輸出
總結(jié)
到此這篇關(guān)于C語言數(shù)據(jù)結(jié)構(gòu)之順序表和單鏈表的文章就介紹到這了,更多相關(guān)C語言順序表和單鏈表內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- C語言數(shù)據(jù)結(jié)構(gòu)順序表中的增刪改(頭插頭刪)教程示例詳解
- C語言數(shù)據(jù)結(jié)構(gòu)順序表中的增刪改(尾插尾刪)教程示例詳解
- C語言 數(shù)據(jù)結(jié)構(gòu)之?dāng)?shù)組模擬實(shí)現(xiàn)順序表流程詳解
- C語言編程簡單卻重要的數(shù)據(jù)結(jié)構(gòu)順序表全面講解
- C語言編程數(shù)據(jù)結(jié)構(gòu)線性表之順序表和鏈表原理分析
- 用C語言舉例講解數(shù)據(jù)結(jié)構(gòu)中的算法復(fù)雜度結(jié)與順序表
- C語言數(shù)據(jù)結(jié)構(gòu)深入探索順序表
相關(guān)文章
Linux下C語言的fork()子進(jìn)程函數(shù)用法及相關(guān)問題解析
fork()函數(shù)在Linux下可以用于產(chǎn)生一個子進(jìn)程,這里我們挑選了兩個fork相關(guān)的面試題,來看一下Linux下C語言的fork()子進(jìn)程函數(shù)用法及相關(guān)問題解析2016-06-06
關(guān)于c++編譯protobuf時提示LNK2001 無法解析的外部符號的問題
這篇文章主要介紹了關(guān)于c++編譯protobuf時提示LNK2001 無法解析的外部符號的問題,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-12-12
C語言多種方法實(shí)現(xiàn)一個函數(shù)左旋字符串中K個字符
這篇文章主要為大家介紹了C語言多種方法實(shí)現(xiàn)一個函數(shù),可以左旋字符串中K個字符,文中附含詳細(xì)的示例講解,有需要的朋友可以借鑒參考下2021-10-10

