知识整理:
1、顺序表的链式存储又称链表;
2、链表中每个元素的内存空间不连续,中间使用指针链接;
3、定义两种结构体:
1)结点
typedef struct node{
int data;
struct node *next;
}Node;
2)单链表
typedef struct list{
struct node *head;
int size;//单链表长度
}List;
代码展示:
#include#include //单链表 //结构体 typedef struct node{ int data;//结点数据域 struct node *next;//结点指针域 }Node; typedef struct list{ struct node *head;//单链表头节点 int size;//单链表长度 }List; //获取新结点 Node *get_new_node(int x){ Node *p=(Node *)malloc(sizeof(Node)); p->data=x; p->next=NULL; return p; } //初始化结构体 List *init_list(){ List *p=(List *)malloc(sizeof(List)); p->head=get_new_node(0); p->size=0;//元素数量为0 return p; } //删除结构体 void delete_list(List *p){ Node *q=p->head; while(q!=NULL){ Node *t=q; q=q->next; free(t);//释放t指向的空间 } free(p); } //插入元素 int insert(List *l,int ind,int x){//ind是待插入的位置 if(l->size head; for(int i=0;i next;//找到插入位置 Node *t=get_new_node(x); t->next=p->next; p->next=t; l->size++;//元素加一 return 0; } //删除元素 int delete(List *l,int ind){ if(ind>=l->size) return 1;//删除位置不合理 Node *p=l->head; for(int i=0;i next; Node *t=p->next; p->next=t->next; free(t); l->size--;//元素减一 return 0; } //打印结点 void show(List *l){ printf("元素个数:%dn",l->size); for(Node *p=l->head->next;p!=NULL;p=p->next){ printf("%d ",p->data); } printf("n"); } int main(){ int n; printf("请输入增删操作总次数: "); scanf("%d",&n); List *N=init_list();//初始化链表 show(N); for(int i=0;i 运行结果:
请输入增删操作总次数: 6 元素个数:0 ************************** 请输入选择符(增:1;删:0): 1 请输入插入的元素和位置:5 1 插入位置不合理! 元素个数:0 ************************** 请输入选择符(增:1;删:0): 1 请输入插入的元素和位置:5 0 元素个数:1 5 ************************** 请输入选择符(增:1;删:0): 1 请输入插入的元素和位置:9 1 元素个数:2 5 9 ************************** 请输入选择符(增:1;删:0): 1 请输入插入的元素和位置:4 1 元素个数:3 5 4 9 ************************** 请输入选择符(增:1;删:0): 0 请输入删除元素的位置:0 元素个数:2 4 9 ************************** 请输入选择符(增:1;删:0): 0 请输入删除元素的位置:2 删除位置不合理! 元素个数:2 4 9



