重慶分公司,新征程啟航
為企業提供網站建設、域名注冊、服務器等服務
為企業提供網站建設、域名注冊、服務器等服務
劉佳瑜*,王越?*, 黃揚* , 張釗*
建網站原本是網站策劃師、網絡程序員、網頁設計師等,應用各種網絡程序開發技術和網頁設計技術配合操作的協同工作。創新互聯專業提供成都網站制作、網站建設,網頁設計,網站制作(企業站、成都響應式網站建設、電商門戶網站)等服務,從網站深度策劃、搜索引擎友好度優化到用戶體驗的提升,我們力求做到極致!
(淮北師范大學計算機科學與技術學院,安徽 淮北)
*These authors contributed to the work equllly and should be regarded as co-first authors.
🌞歡迎來到數據結構的世界?
🌈博客主頁:卿云閣💌歡迎關注🎉點贊👍收藏??留言📝
🌟本文由卿云閣原創!
🙏作者水平很有限,如果發現錯誤,請留言轟炸哦!萬分感謝!
目錄
🍈?線性表的定義
🍉順序表
存儲結構
定義和初始化
插入
刪除
查找
🍊單鏈表
建立單鏈表
查找運算
插入運算
刪除運算
?編輯
求表長運算
🍋雙向鏈表?
🥥循環鏈表?
🍇靜態鏈表?
🍈?線性表的定義
🍉順序表 存儲結構定義和初始化
靜態分配
#define MAXSIZE 10 typedef int DateType; typedef struct { DateType data[MAXSIZE]; int length; }SqList; void InitList(SqList &L) { L.length=0; } int main() { SqList L; InitList(L); return 0; }
動態分配
#include
#include #define MAXSIZE 5 //MAXSIZE是根據實際問題定義的足夠大的整數常量 typedef int DataType; typedef struct{ DataType *data;//定義了一個指針變量存放地址 int length; }SqList; //定義順序表類型 int main() { SqList L; L.data=(DataType*)malloc(sizeof(DataType)*MAXSIZE);//在C++中也可以使用new,和delete free(L.data); //釋放空間 L.data=NULL; return 0; } 增加數組空間的長度?
插入#include
#include #define INITSIZE 10 typedef int DataType; typedef struct{ DataType *data; int length; int maxsize; }SqList; //定義順序表類型 void InitSqList(SqList &L,int initsize) { printf("%d\n",initsize); L.data=(DataType *)malloc(sizeof(DataType )*initsize); L.length=0; L.maxsize=initsize; } //增加動態數組的長度 void IncreaseSize(SqList &L,int len) { int *p=L.data; int i; L.data=(DataType *)malloc(sizeof(DataType )*(INITSIZE+len)); for(i=0;i
刪除#include
#define MAXSIZE 5 //MAXSIZE是根據實際問題定義的足夠大的整數常量 typedef int DataType; typedef struct{ DataType data[MAXSIZE]; int length; }SqList; //定義順序表類型 void InitSqList(SqList &L) { L.length=3; L.data[0]=0; L.data[1]=1; L.data[2]=3; } void InsertSqList(SqList &L,int i,DataType x) { int j; if(L.length==MAXSIZE) { printf("\n順序表是滿的,無法插入元素!"); exit(1); } if(i<1||i>L.length+1) { printf("\n指定的插入位置不存在!"); exit(1); } for(j=L.length-1;j>=i-1;j--) L.data[j+1]=L.data[j]; L.data[i-1]=x; L.length++; } int main() { SqList L; InitSqList(L); int i=3; int x=2; InsertSqList(&.L,i,x); return 0; }
查找#include
#include #define MAXSIZE 5 //MAXSIZE是根據實際問題定義的足夠大的整數常量 typedef int DataType; typedef struct{ DataType data[MAXSIZE]; int length; }SqList; //定義順序表類型 void InitSqList(SqList &L) { L.length=4; L.data[0]=0; L.data[1]=1; L.data[2]=4; L.data[3]=2; } void DeleteSqList(SqList &L,int i) { int j; if(L.length==0) { printf("\n順序表是空的,無法刪除元素!"); exit(1); } if(i<1||i>L.length) { printf("\n指定的刪除位置不存在!"); exit(1); } for(j= i;j< L.length;j++) L.data[j-1]=L.data[j]; L.length--; } int main() { SqList L; InitSqList(L); int x=3; DeleteSqList(L,x); return 0; }
按位查找
#include
#include #define MAXSIZE 5 //MAXSIZE是根據實際問題定義的足夠大的整數常量 typedef int DataType; typedef struct{ DataType data[MAXSIZE]; int length; }SqList; //定義順序表類型 void InitSqList(SqList &L) { L.length=4; L.data[0]=0; L.data[1]=1; L.data[2]=4; L.data[3]=2; } DataType GetElem(SqList L,int i) { return L.data[i-1]; } int main() { SqList L; int a;//接受查找到的元素 InitSqList(L); a=GetElem(L,3); printf("this:%d",a); return 0; } 按值查找
#include
#define MAXSIZE 5 //MAXSIZE是根據實際問題定義的足夠大的整數常量 typedef int DataType; typedef struct{ DataType data[MAXSIZE]; int length; }SqList; //定義順序表類型 void InitSqList(SqList L) { L.length=4; L.data[0]=0; L.data[1]=1; L.data[2]=4; L.data[3]=2; } int LocationSqList(SqList L, DataType x) { int i; for (i=0; i
🍊單鏈表節點的結構
不帶頭結點的單鏈表
帶頭結點的單鏈表#include
#define MAXSIZE 5 typedef int DataType; typedef struct Node { DataType data; struct Node *next; }LNode , *LinkList; bool InitList(LinkList &L) { L=NULL; return true; } bool Empty(LinkList L) { return (L==NULL); } int main() { LinkList L; InitList(L); return 0; } 建立單鏈表#include
#include #define MAXSIZE 5 typedef int DataType; typedef struct Node { DataType data; struct Node *next; }LNode , *LinkList; bool InitList(LinkList &L) { L=(LNode *)malloc(sizeof(LNode)); if (L==NULL) return false; L->next=NULL; return true; } bool Empty(LinkList L) { if (L->next==NULL) return true; else return false; } int main() { LinkList L; InitList(L); return 0; } 頭插法
#define flag -1 #include
#include #define MAXSIZE 5 typedef int DataType; typedef struct Node { DataType data; struct Node *next; }LNode , *LinkList; bool InitList(LinkList &L) { L=(LNode *)malloc(sizeof(LNode)); if (L==NULL) return false; L->next=NULL; return true; } bool Empty(LinkList L) { if (L->next==NULL) return true; else return false; } int CreatLinkList(LinkList &L) { LNode *s; DataType x; int count=0;//記錄輸入的節點的個數 printf("請輸入第一個節點的值:\n"); scanf("%d",&x); while(x!=flag) { s=(LinkList)malloc(sizeof(LNode)); s->data=x; s->next=L->next; L->next=s; count++; printf("請輸入下一個節點的值:\n"); scanf("%d",&x); } return count; } void printLinkList(LinkList &L,int count) { int i; LNode *s=L->next; for(i=0;i data)); s=s->next; } } int main() { printf("使用頭插法建立單鏈表\n"); int count; LinkList L; InitList(L); count=CreatLinkList(L); printLinkList(L,count); return 0; }
尾插法
#define flag -1 #include
#include #define MAXSIZE 5 typedef int DataType; typedef struct Node { DataType data; struct Node *next; }LNode , *LinkList; bool InitList(LinkList &L) { L=(LNode *)malloc(sizeof(LNode)); if (L==NULL) return false; L->next=NULL; return true; } bool Empty(LinkList L) { if (L->next==NULL) return true; else return false; } int CreatLinkList(LinkList &L) { LNode *s,*r; DataType x; int count=0;//記錄輸入的節點的個數 r=L; printf("請輸入第一個節點的值:\n"); scanf("%d",&x); while(x!=flag) { s=(LinkList)malloc(sizeof(LNode)); s->data=x; r->next=s; r=s; count++; printf("請輸入下一個節點的值:\n"); scanf("%d",&x); } r->next=NULL; return count; } void printLinkList(LinkList &L,int count) { int i; LNode *s=L->next; for(i=0;i data)); s=s->next; } } int main() { printf("使用尾插法建立單鏈表\n"); int count; LinkList L; InitList(L); count=CreatLinkList(L); printLinkList(L,count); return 0; } 查找運算
按位查找&按值查找
#define flag -1 #include
#include #define MAXSIZE 5 typedef int DataType; typedef struct Node { DataType data; struct Node *next; }LNode , *LinkList; bool InitList(LinkList &L) { L=(LNode *)malloc(sizeof(LNode)); if (L==NULL) return false; L->next=NULL; return true; } bool Empty(LinkList L) { if (L->next==NULL) return true; else return false; } int CreatLinkList(LinkList &L) { LNode *s,*r; DataType x; int count=0;//記錄輸入的節點的個數 r=L; printf("請輸入第一個節點的值:\n"); scanf("%d",&x); while(x!=flag) { s=(LinkList)malloc(sizeof(LNode)); s->data=x; r->next=s; r=s; count++; printf("請輸入下一個節點的值:\n"); scanf("%d",&x); } r->next=NULL; return count; } void printLinkList(LinkList &L,int count) { int i; LNode *s=L->next; for(i=0;i data)); s=s->next; } } LNode *GetLinkList(LinkList L,int i) { LinkList p=L; int j=0;//表示當前查找的位置 while(p->next!=NULL&&jnext; j++; } return p; } LNode *LocationLinkList(LinkList L,DataType x) { LinkList p=L->next; while(p->next!=NULL&&p->data!=x) { p=p->next; } return p; } int main() { printf("使用尾插法建立單鏈表\n"); int count; LNode *p1,*p2;//接受查找的結果 LinkList L; InitList(L); count=CreatLinkList(L); printf("建立單鏈表如下\n"); printLinkList(L,count); printf("查找第3個元素的值:\n"); p1=GetLinkList(L,3); printf("查找第3個元素的值:%d\n",p1->data); printf("4在鏈表中的地址:\n"); p2=LocationLinkList(L,4); printf("4在鏈表中的地址%d\n",p2 ); return 0; } 插入運算
#define flag -1 #include
#include #define MAXSIZE 5 typedef int DataType; typedef struct Node { DataType data; struct Node *next; }LNode , *LinkList; bool InitList(LinkList &L) { L=(LNode *)malloc(sizeof(LNode)); if (L==NULL) return false; L->next=NULL; return true; } bool Empty(LinkList L) { if (L->next==NULL) return true; else return false; } int CreatLinkList(LinkList &L) { LNode *s,*r; DataType x; int count=0;//記錄輸入的節點的個數 r=L; printf("請輸入第一個節點的值:\n"); scanf("%d",&x); while(x!=flag) { s=(LinkList)malloc(sizeof(LNode)); s->data=x; r->next=s; r=s; count++; printf("請輸入下一個節點的值:\n"); scanf("%d",&x); } r->next=NULL; return count; } void printLinkList(LinkList &L,int count) { int i; LNode *s=L->next; for(i=0;i data)); s=s->next; } } LNode *GetLinkList(LinkList L,int i) { LinkList p=L; int j=0;//表示當前查找的位置 while(p!=NULL&&jnext; j++; } return p; } LNode *LocationLinkList(LinkList L,DataType x) { LinkList p=L->next; while(p->next!=NULL&&p->data!=x) { p=p->next; } return p; } void InsertLinkList(LinkList L,int i,DataType x) { LNode *p,*s; p=GetLinkList(L,i-1); if (p==NULL) { printf("插入的位置不合法:\n"); exit(1); } else { s=(LNode *) malloc(sizeof(LNode)); s->data=x; s->next=p->next; p->next=s; } } int main() { printf("使用尾插法建立單鏈表\n"); int count; LNode *p1,*p2;//接受查找的結果 LinkList L; InitList(L); count=CreatLinkList(L); printf("建立單鏈表如下\n"); printLinkList(L,count); InsertLinkList(L,3,2); printf("插入2后的單鏈表如下:\n"); printLinkList(L,count+1); return 0; } 刪除運算
#define flag -1 #include
#include #define MAXSIZE 5 typedef int DataType; typedef struct Node { DataType data; struct Node *next; }LNode , *LinkList; bool InitList(LinkList &L) { L=(LNode *)malloc(sizeof(LNode)); if (L==NULL) return false; L->next=NULL; return true; } bool Empty(LinkList L) { if (L->next==NULL) return true; else return false; } int CreatLinkList(LinkList &L) { LNode *s,*r; DataType x; int count=0;//記錄輸入的節點的個數 r=L; printf("請輸入第一個節點的值:\n"); scanf("%d",&x); while(x!=flag) { s=(LinkList)malloc(sizeof(LNode)); s->data=x; r->next=s; r=s; count++; printf("請輸入下一個節點的值:\n"); scanf("%d",&x); } r->next=NULL; return count; } void printLinkList(LinkList &L,int count) { int i; LNode *s=L->next; for(i=0;i data)); s=s->next; } } LNode *GetLinkList(LinkList L,int i) { LinkList p=L; int j=0;//表示當前查找的位置 while(p!=NULL&&jnext; j++; } return p; } LNode *LocationLinkList(LinkList L,DataType x) { LinkList p=L->next; while(p!=NULL&&p->data!=x) { p=p->next; } return p; } void InsertLinkList(LinkList L,int i,DataType x) { LNode *p,*s; p=GetLinkList(L,i-1); if (p==NULL) { printf("插入的位置不合法:\n"); exit(1); } else { s=(LNode *) malloc(sizeof(LNode)); s->data=x; s->next=p->next; p->next=s; } } void DeleteLinkList(LinkList L,int i) { LNode *p,*q; p=GetLinkList(L,i-1); if (p==NULL) { printf("刪除的位置不合法:\n"); exit(1); } else { if(p->next==NULL) { printf("刪除的位置不合法:\n"); exit(1); } else { q=p->next; p->next=p->next->next; free(q); } } } int main() { printf("使用尾插法建立單鏈表\n"); int count; LNode *p1,*p2;//接受查找的結果 LinkList L; InitList(L); count=CreatLinkList(L); printf("建立單鏈表如下\n"); printLinkList(L,count); InsertLinkList(L,3,2); printf("刪除第3個節點的單鏈表如下:\n"); DeleteLinkList(L,3); printLinkList(L,count-1); return 0; } 求表長運算
#define flag -1 #include
#include #define MAXSIZE 5 typedef int DataType; typedef struct Node { DataType data; struct Node *next; }LNode , *LinkList; bool InitList(LinkList &L) { L=(LNode *)malloc(sizeof(LNode)); if (L==NULL) return false; L->next=NULL; return true; } bool Empty(LinkList L) { if (L->next==NULL) return true; else return false; } int CreatLinkList(LinkList &L) { LNode *s,*r; DataType x; int count=0;//記錄輸入的節點的個數 r=L; printf("請輸入第一個節點的值:\n"); scanf("%d",&x); while(x!=flag) { s=(LinkList)malloc(sizeof(LNode)); s->data=x; r->next=s; r=s; count++; printf("請輸入下一個節點的值:\n"); scanf("%d",&x); } r->next=NULL; return count; } void printLinkList(LinkList &L,int count) { int i; LNode *s=L->next; for(i=0;i data)); s=s->next; } } LNode *GetLinkList(LinkList L,int i) { LinkList p=L; int j=0;//表示當前查找的位置 while(p!=NULL&&jnext; j++; } return p; } LNode *LocationLinkList(LinkList L,DataType x) { LinkList p=L->next; while(p!=NULL&&p->data!=x) { p=p->next; } return p; } int LengthLinkList(LinkList L) { int len=0; LNode *p=L; while(p->next) { len++; p=p->next; } return len; } int main() { printf("使用尾插法建立單鏈表\n"); int count; int length; LNode *p1,*p2;//接受查找的結果 LinkList L; InitList(L); count=CreatLinkList(L); printf("建立單鏈表如下\n"); printLinkList(L,count); length=LengthLinkList(L); printf("單鏈表的長度是%d\n",length); return 0; }
🍋雙向鏈表?
?🥥循環鏈表?
?🍇靜態鏈表?
Institutional Review Board Statement: Not applicable.
Informed Consent Statement: Not applicable.
Data Availability Statement: Not applicable.
Author Contributions:All authors participated in the assisting performance study and approved the paper.
Conflicts of Interest: The authors declare no conflict of interest
你是否還在尋找穩定的海外服務器提供商?創新互聯www.cdcxhl.cn海外機房具備T級流量清洗系統配攻擊溯源,準確流量調度確保服務器高可用性,企業級服務器適合批量采購,新人活動首月15元起,快前往官網查看詳情吧