数据结构。之。链表的实现。
基础篇;
链表的建立和输出:
#include <stdio.h> //顺序表的定义: #define ListSize 100 //表空间大小可根据实际需要而定,这里假设为100 typedef int DataType; //DataType可以是任何相应的数据类型如int, float或char typedef struct { DataType data[ListSize]; //向量data用于存放表结点 int length; //当前的表长度 }SeqList; void main() { SeqList L; int n=5,i,x; //欲建立的顺序表长度 L.length=0; void CreateList(SeqList *L,int n); void PrintList(SeqList L,int n); int LocateList(SeqList L,DataType x); CreateList(&L,n); //建立顺序表 PrintList(L,n); //打印顺序表 } //顺序表的建立: void CreateList(SeqList *L,int n) { int i; for (i=0;i<n;i++) scanf("%d",&(*L).data[i]); // printf("%d ",(*L).data[i]); (*L).length=n; /* for (i=0;i<n;i++) printf("%d ",L.data[i]);*/ } //顺序表的打印: void PrintList(SeqList L,int n) { int i; for (i=0;i<n;i++) printf("%d ",L.data[i]); printf("%d ",i); printf(" "); }
链表的查找:
#include <stdio.h> #include <stdlib.h> //顺序表的定义: #define ListSize 100 //表空间大小可根据实际需要而定,这里假设为100 typedef int DataType; //DataType可以是任何相应的数据类型如int, float或char typedef struct { DataType data[ListSize]; //向量data用于存放表结点 int length; //当前的表长度 }SeqList; void main() { int LocateList(SeqList L,DataType x); void PrintList(SeqList L,int n); SeqList L; int i,n=10,x; for (i=0;i<n;i++)//随机取值 L.data[i]=rand()%100; L.length=n; PrintList(L,n); //打印顺序表 printf("输入要查找的值:"); scanf("%d",&x); i=LocateList(L,x); //顺序表查找 if (i==0) printf("未找到%d! ",x); else printf("找到%d,在第%d个位置上! ",x,i); } //顺序表的查找: int LocateList(SeqList L,DataType x) { int i=0; while (i<L.length && L.data[i]!=x) ++i; if (i<L.length) return i+1; else return 0; } //顺序表的打印: void PrintList(SeqList L,int n) { int i; for (i=0;i<n;i++) printf("%d ",L.data[i]); printf(" "); }
链表的插入:
#include <stdio.h> #include <stdlib.h> //顺序表的定义: #define ListSize 100 //表空间大小可根据实际需要而定,这里假设为100 typedef int DataType; //DataType可以是任何相应的数据类型如int, float或char typedef struct { DataType data[ListSize]; //向量data用于存放表结点 int length; //当前的表长度 }SeqList; void main() { void InsertList(SeqList *L,DataType x,int i); void PrintList(SeqList L,int n); SeqList L; int i,n=10; DataType x; for (i=0;i<n;i++) L.data[i]=rand()%100; L.length=n; PrintList(L,n); //打印顺序表 printf("输入要插入的位置:"); scanf("%d",&i); printf("输入要插入的元素:"); scanf("%d",&x); InsertList(&L,x,i); //顺序表插入 PrintList(L,n); //打印顺序表 } //顺序表的插入: void InsertList(SeqList *L,DataType x,int i) {//将新结点x插入L所指的顺序表的第i个结点的位置上 int j; if (i<1 || i>(*L).length+1) { printf("插入位置非法"); exit(0); } if ((*L).length>=ListSize) { printf("表空间溢出,退出运行"); exit(0); } for (j=(*L).length-1;j>=i-1;j--) (*L).data[j+1]=(*L).data[j]; (*L).data[i-1]=x; (*L).length++; } //顺序表的打印: void PrintList(SeqList L,int n) { int i; for (i=0;i<L.length;i++) printf("%d ",L.data[i]); printf(" "); }
链表的删除:
#include <stdio.h> #include <stdlib.h> //顺序表的定义: #define ListSize 100 //表空间大小可根据实际需要而定,这里假设为100 typedef int DataType; //DataType可以是任何相应的数据类型如int, float或char typedef struct { DataType data[ListSize]; //向量data用于存放表结点 int length; //当前的表长度 }SeqList; void main() { void DeleteList(SeqList *L,int i); void PrintList(SeqList L,int n); SeqList L; int i,n=10; for (i=0;i<n;i++) L.data[i]=rand()%100; L.length=n; PrintList(L,n); //打印顺序表 printf("输入要删除的位置:"); scanf("%d",&i); DeleteList(&L,i); //顺序表删除 PrintList(L,n); //打印顺序表 } //顺序表的删除: void DeleteList(SeqList *L,int i) {//从L所指的顺序表中删除第i个结点 int j; if (i<1 || i>(*L).length) { printf("删除位置非法"); exit(0); } for (j=i;j<=(*L).length-1;j++) (*L).data[j-1]=(*L).data[j]; (*L).length--; } //顺序表的打印: void PrintList(SeqList L,int n) { int i; for (i=0;i<L.length;i++) printf("%d ",L.data[i]); printf(" "); }
然后,是大集合,把之前的都合到一起;
#include <stdio.h> #include <stdlib.h> //顺序表的定义: #define ListSize 100 //表空间大小可根据实际需要而定,这里假设为100 typedef int DataType; //DataType可以是任何相应的数据类型如int, float或char typedef struct { DataType data[ListSize]; //向量data用于存放表结点 int length; //当前的表长度 }SeqList; //顺序表的建立: void CreateList(SeqList *L,int n) { int i; printf("输入数据: "); for (i=0;i<n;i++) scanf("%d",&(*L).data[i]); // printf("%d ",(*L).data[i]); (*L).length=n; /* for (i=0;i<n;i++) printf("%d ",L.data[i]);*/ } //顺序表的打印: void PrintList(SeqList L,int n) { int i; for (i=0;i<n;i++) printf("%d ",L.data[i]); printf(" "); printf("链表长度是:%d ",i); } //顺序表的查找: int LocateList(SeqList L,DataType x) { int i=0; while (i<L.length && L.data[i]!=x) ++i; if (i<L.length) return i+1; else return 0; } //顺序表的插入: void InsertList(SeqList *L,DataType x,int i) {//将新结点x插入L所指的顺序表的第i个结点的位置上 int j; if (i<1 || i>(*L).length+1) { printf("插入位置非法"); exit(0); } if ((*L).length>=ListSize) { printf("表空间溢出,退出运行"); exit(0); } for (j=(*L).length-1;j>=i-1;j--) (*L).data[j+1]=(*L).data[j]; (*L).data[i-1]=x; (*L).length++; } //顺序表的删除: void DeleteList(SeqList *L,int i) {//从L所指的顺序表中删除第i个结点 int j; if (i<1 || i>(*L).length) { printf("删除位置非法"); exit(0); } for (j=i;j<=(*L).length-1;j++) (*L).data[j-1]=(*L).data[j]; (*L).length--; } void main() { SeqList L; int i,x; int n; //欲建立的顺序表长度 printf("欲建立的顺序表长度:"); scanf("%d",&n); L.length=0; CreateList(&L,n); //建立顺序表 PrintList(L,n); //打印顺序表 printf("输入要查找的值:"); scanf("%d",&x); i=LocateList(L,x); //顺序表查找 if (i==0) printf("未找到%d! ",x); else printf("找到%d,在第%d个位置上! ",x,i); printf("输入要插入的位置:"); scanf("%d",&i); printf("输入要插入的元素:"); scanf("%d",&x); InsertList(&L,x,i); //顺序表插入 PrintList(L,n+1); //打印顺序表 printf("输入要删除的位置:"); scanf("%d",&i); DeleteList(&L,i); //顺序表删除 PrintList(L,n); //打印顺序表 }
适合初学者理解和研究;