c語言刪除雙向鏈表重復元素,求一個雙向鏈表的建立,插入刪除的c語言程序完整版的,借鑒一下思想,再多說一下就是能運行的那種...

最佳答案

//鏈表的操作編輯

//線性表的雙向鏈表存儲結構

typedef struct DuLNode

{

ElemType data;

struct DuLNode *prior,*next;

}DuLNode,*DuLinkList;

//

//帶頭結點的雙向循環鏈表的基本操作

void InitList(DuLinkList L)

{ /* 產生空的雙向循環鏈表L */

L=(DuLinkList)malloc(sizeof(DuLNode));

if(L)

L->next=L->prior=L;

else

exit(OVERFLOW);

}

//

//銷毀雙向循環鏈表L

void DestroyList(DuLinkList L)

{

DuLinkList q,p=(*L)->next; /* p指向第一個結點 */

while(p!=*L) /* p沒到表頭 */

{

q=p->next;

free(p);

p=q;

}

free(*L);

*L=NULL;

}

//

//重置鏈表為空表

void ClearList(DuLinkList L) /* 不改變L */

{

DuLinkList q,p=L->next; /* p指向第一個結點 */

while(p!=L) /* p沒到表頭 */

{

q=p->next;

free(p);

p=q;

}

L->next=L->prior=L; /*頭結點的兩個指針域均指向自身 */

}

//

//驗證是否為空表

Status ListEmpty(DuLinkList L)

{ /* 初始條件:線性表L已存在

if(L->next==L&&L->prior==L)

return TRUE;

else

return FALSE;

}

//

//元素的操作編輯

//計算表內元素個數

int ListLength(DuLinkList L)

{ /* 初始條件:L已存在。操作結果: */

int i=0;

DuLinkList p=L->next; /* p指向第一個結點 */

while(p!=L) /* p沒到表頭 */

{

i++;

p=p->next;

}

return i;

}

//

//賦值

Status GetElem(DuLinkList L,int i,ElemType *e)

{ /* 當第i個元素存在時,其值賦給e并返回OK,否則返回ERROR */

int j=1; /* j為計數器 */

DuLinkList p=L->next; /* p指向第一個結點 */

while(p!=L&&j

{

p=p->next;

j++;

}

if(p==L||j>i) /* 第i個元素不存在 */

return ERROR;

*e=p->data; /* 取第i個元素 */

return OK;

}

//

//查找元素

int LocateElem(DuLinkList L,ElemType e,Status(*compare)(ElemType,ElemType))

{ /* 初始條件:L已存在,compare()是數據元素判定函數 */

/* 操作結果:返回L中第1個與e滿足關系compare()的數據元素的位序。 */

/* 若這樣的數據元素不存在,則返回值為0 */

int i=0;

DuLinkList p=L->next; /* p指向第1個元素 */

while(p!=L)

{

i++;

if(compare(p->data,e)) /* 找到這樣的數據元素*/

return i;

p=p->next;

}

return 0;

}

//

//查找元素前驅

Status PriorElem(DuLinkList L,ElemType cur_e,ElemType *pre_e)

{ /* 操作結果:若cur_e是L的數據元素,且不是第一個,則用pre_e返回它的前驅, */

/* 否則操作失敗,pre_e無定義 */

DuLinkList p=L->next->next; /* p指向第2個元素 */

while(p!=L) /* p沒到表頭 */

{

if(p->data==cur_e)

{

*pre_e=p->prior->data;

return TRUE;

}

p=p->next;

}

return FALSE;

}

//

//查找元素后繼

Status NextElem(DuLinkList L,ElemType cur_e,ElemType *next_e)

{ /* 操作結果:若cur_e是L的數據元素,且不是最后一個,則用next_e返回它的后繼, */

/* 否則操作失敗,next_e無定義 */

DuLinkList p=L->next->next; /* p指向第2個元素 */

while(p!=L) /* p沒到表頭 */

{

if(p->prior->data==cur_e)

{

*next_e=p->data;

return TRUE;

}

p=p->next;

}

return FALSE;

}

//

//查找元素地址

DuLinkList GetElemP(DuLinkList L,int i) /* 另加 */

{ /* 在雙向鏈表L中返回第i個元素的地址。i為0,返回頭結點的地址。若第i個元素不存在,*/

/* 返回NULL */

int j;

DuLinkList p=L; /* p指向頭結點 */

if(i<0||i>ListLength(L)) /* i值不合法 */

return NULL;

for(j=1;j<=i;j++)

p=p->next;

return p;

}

//

//元素的插入

Status ListInsert(DuLinkList L,int i,ElemType e)

{ /* 在帶頭結點的雙鏈循環線性表L中第i個位置之前插入元素e,i的合法值為1≤i≤表長+1 */

/* 改進算法2.18,否則無法在第表長+1個結點之前插入元素 */

DuLinkList p,s;

if(i<1||i>ListLength(L)+1) /* i值不合法 */

return ERROR;

p=GetElemP(L,i-1); /* 在L中確定第i個元素前驅的位置指針p */

if(!p) /* p=NULL,即第i個元素的前驅不存在(設頭結點為第1個元素的前驅) */

return ERROR;

s=(DuLinkList)malloc(sizeof(DuLNode));

if(!s)

return OVERFLOW;

s->data=e;

s->prior=p; /* 在第i-1個元素之后插入 */

s->next=p->next;

p->next->prior=s;

p->next=s;

return OK;

}

//

//元素的刪除

Status ListDelete(DuLinkList L,int i,ElemType *e)

{ /* 刪除帶頭結點的雙鏈循環線性表L的第i個元素,i的合法值為1≤i≤表長 */

DuLinkList p;

if(i<1) /* i值不合法 */

return ERROR;

p=GetElemP(L,i); /* 在L中確定第i個元素的位置指針p */

if(!p) /* p=NULL,即第i個元素不存在 */

return ERROR;

*e=p->data;

p->prior->next=p->next;

p->next->prior=p->prior;

free(p);

return OK;

}

//

//正序查找

void ListTraverse(DuLinkList L,void(*visit)(ElemType))

{ /* 由雙鏈循環線性表L的頭結點出發,正序對每個數據元素調用函數visit() */

DuLinkList p=L->next; /* p指向頭結點 */

while(p!=L)

{

visit(p->data);

p=p->next;

}

printf("\n");

}

//

//逆序查找

void ListTraverseBack(DuLinkList L,void(*visit)(ElemType))

{ /* 由雙鏈循環線性表L的頭結點出發,逆序對每個數據元素調用函數visit()。另加 */

DuLinkList p=L->prior; /* p指向尾結點 */

while(p!=L)

{

visit(p->data);

p=p->prior;

}

printf("\n");

}

追問:

可執行,謝謝

最佳答案由網友??jariii??提供

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/533784.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/533784.shtml
英文地址,請注明出處:http://en.pswp.cn/news/533784.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

華為p10和p10plus區別_華為p10和p10plus哪個好 華為p10與p10plus區別對比【圖文】

華為p10與p10plus是華為在2017年的首發旗艦手機&#xff0c;作為顏值與配置都很亮眼的華為p10與p10plus自然成了大眾的焦點&#xff0c;當然也就避不可免的用來對比。究竟華為p10和p10plus哪個好?下面小編就來給大家講講華為p10與p10plus的區別對比。華為P10與P10 Plus區別對比…

python數學圓周率_Python編程超簡單方法算圓周率

我們都知道&#xff0c;圓周率是3.1415926也就是π&#xff0c;但你有沒有想過&#xff0c;圓周率是怎么算出來的呢&#xff1f; 這個是德國數學家萊布尼茲發明的算圓周率的方法&#xff0c;公式為&#xff1a;π4(1-1/31/51/71/9-1/11……)&#xff0c;其中&#xff0c;分母每…

計算payload長度c語言,C語言0長度數組(可變數組/柔性數組)詳解

1 零長度數組概念眾所周知, GNU/GCC 在標準的 C/C 基礎上做了有實用性的擴展, 零長度數組(Arrays of Length Zero) 就是其中一個知名的擴展.多數情況下, 其應用在變長數組中, 其定義如下struct Packet{ int state; int len; char cData[0]; //這里的0長結構體就為變長結構體提供…

iphone主屏幕動態壁紙_iPhone8怎么設置動態壁紙?iPhone8動態壁紙設置教程

iPhone8怎么設置動態壁紙?朋友們平時想把一些拍攝的動態圖片設置iPhone8壁紙&#xff0c;該怎么設置呢?估計有 不少朋友還不知道如何設置&#xff0c; 在這里我就來為大家介紹一下iPhone8設置動態壁紙的教程&#xff0c;一起來看一看吧!iPhone8動態壁紙設置教程首先打開iPhon…

python封裝介紹_談python3的封裝

這章給大家介紹&#xff0c;如何封裝一個簡單的python庫首先創建一個以下型式的文件結構rootFile/setup.pyexample_package/__init__.pyexample_module.pyexample_package2/__init__.pyexample_module.py其中的兩個__init__.py可以是一個空文件&#xff0c;但是它是導入package…

go語言調用c 的頭文件 so,golang 學習(10): 使用go語言調用c語言的so動態庫-Go語言中文社區...

一、前言最近在學習go&#xff0c;因為需要調用c語言打包成的so動態庫里面的方法&#xff0c;避免自己再去造輪子&#xff0c;所以想直接使用golang調用so&#xff0c;但是參考了其他博客大佬寫的&#xff0c;我每一步原封不動的寫下來&#xff0c;結果都是一堆錯誤&#xff0c…

log nginx 客戶端請求大小_Nginx日志分析和參數詳解

本文檔主要介紹Nginx設置日志參數的作用&#xff0c;以及Nginx日志常用分析命令基本大綱&#xff1a;1.Nginx日志記錄格式的介紹2.Nginx日志參數詳解3.Web服務流量名詞介紹4.Nginx日志常用分析命令示范一&#xff1a;Nginx日志記錄格式的介紹log_format用來設置日志的記錄格式&…

python函數的封裝調用_Python封裝一個函數來打印到變量

如果我有一個包含大量打印語句的函數&#xff1a; 即. def funA(): print "Hi" print "There" print "Friend" print "!" 我想做的是這樣的事情 def main(): ##funA() does not print to screen here a getPrint(funA()) ##where get…

android 開機動畫 漸變,[Parallax Animation]實現知乎 Android 客戶端啟動頁視差滾動效果...

前言Parallax Scrolling (視差滾動)&#xff0c;是一種常見的動畫效果。視差一詞來源于天文學&#xff0c;但在日常生活中也有它的身影。在疾馳的動車上看風景時&#xff0c;會發現越是離得近的&#xff0c;相對運動速度越快&#xff0c;而遠處的山川河流只是緩慢的移動著&…

js訪問對方手機文件夾_求JS大神幫我寫個利用JS來實現手機端和PC端訪問自動選擇樣式文件代碼...

展開全部現在比較流行的辦法是 一個網站2套代碼&#xff0c;一套是手機一套pc&#xff0c;在網站首頁開e68a84e8a2ad3231313335323631343130323136353331333363353735頭寫上一段識別各瀏覽器的判斷方法&#xff0c;根據結果引入不同的樣式詳細判斷如下&#xff1a;var browser{…

python可以做計量分析嗎_技術分享 - python數據分析(2)——數據特征分析(上)...

1 分布分析 分布分析能揭示數據的分布特征和分布類型。對于定量數據&#xff0c;欲了解其分布形式是對稱的還是非對稱的&#xff0c;發現某些特大或特小的可疑值&#xff0c;可通過繪制頻率分布表、繪制頻率分布直方圖、繪制莖葉圖進行直觀地分析&#xff1b;對于定性分類數據&…

android lrc 歌詞顯示,Android歌詞 AndroidLrc歌詞

[ti:Android][ar:川畑要][al:0][by:黃病病][00:00.00][00:01.69]Android[00:07.51]歌手&#xff1a;川畑要[00:10.96]作詞&#xff1a;Kaname Kawabata[00:12.64]作曲&#xff1a;UTAKaname Kawabata[00:14.06]BY:黃病病[00:15.80][00:15.66]一際目を引くまるでandroid[00:23.1…

web前端開發技術期末考試_Web前端開發技術期末試題1

絕密★啟用前Web前端開發技術期一、單項選擇題(本大題共25小題&#xff0c;每小題1分&#xff0c;共25分)1.網頁制作工具按照其工作方式可分為( )A.HTML語言和非HTML語言兩大類B.DHTML方式和JavaScript方式兩大類C.標注型網頁制作工具和所見即所得型網頁制作工具兩大類D.基于Wi…

matlab的7.3版本是什么_樂建工程寶V6.3版本升級說明公告

尊敬的樂建工程寶客戶&#xff1a;您好&#xff01;為了給客戶提供更加優質的產品和服務&#xff0c;我司已于2019年11月20日開始樂建工程寶V6.3版本升級服務。目前&#xff0c;Android系統各應用市場已基本審核完畢&#xff0c;iOS系統已上傳AppStore&#xff0c;目前蘋果官方…

魅族android 版本 6.0下載,flyme6.0內測版

由魅族開發的全新安卓系統flyme6.0系統固件已經到來&#xff0c;相對于Flyme 5系統有了眾多改變和提升&#xff0c;全新的智能服務系統&#xff0c;多達400于項全新功能&#xff0c;同時讓操作界面更加簡潔&#xff0c;易于操作&#xff0c;而系統運行速度也將有所提升&#xf…

origin設置不同區域的顏色_[測試狗]Origin入門教程(二十四):效率翻倍小技巧——修改默認字體...

在使用Origin的時候&#xff0c;對于每次繪圖都需要更改字體覺得很麻煩&#xff0c;因為Origin默認的字體為Arial&#xff0c;但是我們常用的字體一般為Times New Roman&#xff0c;在下拉框的很底部&#xff0c;每次更改都很浪費時間。那為什么不把他設置成默認字體呢&#xf…

cgi web 調用多次啟動_全面了解CGI、FastCGI、PHPFPM

一、拋個磚1、Web Server傳遞數據的方法正式說CGI之前&#xff0c;先來了解一下Web Server傳遞數據的另外一種方法&#xff1a;PHP Module加載方式。相信都會想起Apache吧&#xff0c;初學php時&#xff0c;在windows上安裝完php和Apache之后&#xff0c;為了讓Apache能夠解析p…

android群英傳神兵利器pdf,《Android群英傳:神兵利器》勘誤

1勘誤一晃&#xff0c;我的新書《Android群英傳:神兵利器》上市好多天了&#xff0c;有不少朋友已經拿到書了。本來以為&#xff0c;這次我看了不下十遍&#xff0c;再加上編輯們的校對&#xff0c;應該不會有很多勘誤了吧~ 可事實證明&#xff0c;我還是太年輕啊&#xff01;大…

datatype未定義是什么意思_TypeError:無法讀取未定義的屬性'then'

loginService.islogged()上面的函數返回一個像“失敗”的字符串 . 但是&#xff0c;當我嘗試運行然后對它運行時&#xff0c;它將返回錯誤TypeError: Cannot read property then of undefined并且光標在 connected 之后和 .then 之前指示 .以下是完整功能&#xff1a;var conne…

python運行命令_對python中執行DOS命令的3種方法總結

1. 使用os.system("cmd") 特點是執行的時候程序會打出cmd在Linux上執行的信息。 import os os.system("ls") 2. 使用Popen模塊產生新的process 現在大部分人都喜歡使用Popen。Popen方法不會打印出cmd在linux上執行的信息。的確&#xff0c;Popen非常強大&a…