資源簡介
數據結構線性表操作的一個實驗:
實驗要求
順序和鏈式存儲的線性表的創建、獲取元素、插入和刪除元素等基本操作的實現。
題目要求:
輸入:一組整型數據A,一組整型數據B
輸出:A與B的交集,以及A與B的并集
要求:A和B使用兩種存儲方式:順序存儲和鏈式存儲。

代碼片段和文件信息
#include
#include
#include
using?namespace?std;
#define?OK?1//定義常用判斷詞為整型數值
#define?ERROR?0
#define?TRUE?1
#define?FALSE?0
typedef?int?Status;//定義Status為整型類型
typedef?int?ElemType;//ElemType類型可根據實際情況改變,首先定義ElemType為整型類型
struct?Node;//聲明結點結構體
typedef?struct?Node?*PtrToNode;//定義PtrToNode、linkList、Position類型
typedef?PtrToNode?linkList;
typedef?PtrToNode?Position;
struct?Node//結構體定義
{
????ElemType?data;
????Position?next;
};
//函數的聲明
linkList?InitList();//創建空的單鏈表
Status?IsEmpty(linkList?L);//判斷是否為空,返回0或1
Status?GetLength(linkList?L);//獲得單鏈表的長度并返回
Status?GetElem(linkList?Lint?iElemType?&e);//將單鏈表L中的弟i個結點元素值返回給e
Status?Insert(linkList?Lint?iElemType?e);//在單鏈表的第i個結點前插入元素值為e的結點
Status?Delete(linkList?Lint?iElemType?&e);//刪除單鏈表中第i個結點,并用e返回其值
Status?AvoidList(linkList?L);//除掉集合中重復的元素
Status?DispList(linkList?L);//打印集合中所有的元素
Status?IntersectlinkList(linkList?LalinkList?Lb);//求兩個集合的交集并打印這個交集的所有元素
Status?UnionlinkList(linkList?LalinkList?Lb);//求兩個集合的并集并打印這個并集的所有元素
//函數定義
//單鏈表初始化
linkList?InitList()
{
????linkList?L;
????L?=(linkList)?malloc(sizeof(Node))?;//創建一個單鏈表的頭結點,并且指向空
????L->next?=?NULL;
????return?L;
}
//判斷單鏈表是否為空,并返回判斷結果
Status?IsEmpty(linkList?L)
{
????return?L->next?==?NULL;
}
//獲取單鏈表的長度并返回
Status?GetLength(linkList?L)
{
????if(IsEmpty(L)==1)//如果單鏈表為空,則返回0
????????return?0;
????Position?p;//聲明一個指針
????p=L;
????int?i=0;
????while(p->next)//使用p->next遍歷所有結點直到指向NULL并計數
????{
????????i++;
????????p=p->next;
????}
????return?i;
}
//將單鏈表L中的弟i個位置元素值返回給e
Status?GetElem(linkList?Lint?i?ElemType?&e)
{
????if(IsEmpty(L)==1)//如果單鏈表為空,停止尋找
????????return?ERROR;
????int?j?=?1;//j為計數器
????Position?p;//聲明一個指針讓p指向L的第一個結點
????p=L->next;
????while(p&&j????{
????????p=p->next;
????????j++;
????}
????if(!p||j>i)
????????return?ERROR;//第i個結點不存在
????e=p->data;//取第i個結點的數據
????return?OK;
}
//在單鏈表中的第i個結點前插入值為e的結點
Status?Insert(linkList?Lint?iElemType?e)
{
????if(i<1)
????????return?ERROR;
????int?j=1;
????Position?ps;
????p?=?L;
????while(p&&j????{
????????p?=?p->next;
????????j++;
????}
????if(!p||j>i)
????????return?ERROR;//第i-1個結點不存在
????s=(linkList)malloc(sizeof(Node));//生成新結點
????s->data=e;
????s->next=p->next;//將p的后繼結點賦值給s的后繼結點
????p->next=s;
????return?OK;
}
//刪除單鏈表中第i個結點,并用e返回其值
Status?Delete(linkList?Lint?iElemType?&e)
{
????if(IsEmpty(L)==1)
????????return?ERROR;
????int?j=1;
????Position?ps;
????p?=?L;
????while?(p->next?&&?j????{
????????p?=?p->next;
????????j++;
????}
????if(!(p->next)||?j>i)
????????return?ERROR;//第i個結點不存在
????s=p->next;
????p->next=s->next;//將s的后繼賦值給p的后繼
????e?=?s->data;//將s結點中的數據給e
????free(s);//釋放s結點
????return?OK;
}
//除掉集合中重復的元素
Status?AvoidList(linkList?L)
{
????if(IsEmpty(L)==1)
????????return?ERROR;
????ElemType?ee1e2e3;
????for(int?i=1;?i<=GetLength(L);?i++)//以前一個元素的值為基準,讓其后的每一個值與它比較。
????{
???
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????文件????????7777??2018-10-14?13:06??鏈式存儲和線性存儲實現\li
?????文件????????8289??2018-12-19?23:36??鏈式存儲和線性存儲實現\Sqlist.cpp
?????目錄???????????0??2018-12-22?15:59??鏈式存儲和線性存儲實現\
- 上一篇:FTP客戶端 源代碼
- 下一篇:鏈表實現學生管理
評論
共有 條評論