c語言實現循環鏈表,c語言實現循環鏈表的基本操作

循環鏈表和單鏈表其實區別不大,差別僅在于算法中的循環條件不是p或者p->next,而是是否等于頭指針。下面這個例子簡單的實現了循環鏈表的基本操作,其中插入和刪除只是完成了主要的部分,沒有判斷。

#include

#include

struct Data

{

char name;

int age;

};

struct CirList

{

Data *data;

CirList *next;

};

CirList* InitListhead()

{

CirList *list;

list = (CirList*)malloc(sizeof(CirList));

list->next = NULL;

return list;

}

CirList *CreateData()

{

CirList *node;

node = (CirList*)malloc(sizeof(CirList));

node->next = NULL;

node->data = (Data*)malloc(sizeof(Data));

printf("輸入姓名:");

scanf("%c",&node->data->name);

printf("輸入年齡:");

scanf("%d",&node->data->age);

getchar();

return node;

}

//頭插法初始化鏈表

void InitList(CirList *head)

{

CirList *node ;

node = CreateData();

//新結點的next指針域賦給頭結點的next指針域

node->next = head->next;

//新結點賦給頭結點的指針域

head->next = node;

//新結點指針域指向頭結點

node->next = head;

}

//尾插法初始化鏈表

void InitList_2(CirList *list)

{

CirList *node,*p=list;

int i = 0;

while(i<3)

{

node = CreateData();

p->next = node;

p = node;

i++;

}

//令表尾指針指向頭結點

node->next = list;

}

void Insert(CirList *list)

{

CirList *node,*saveHead = list;

node = CreateData();

printf("輸入插入位置:");

int position,i=0;

scanf("%d",&position);

//尋找插入的前驅

while(list != NULL && i < position-1)

{

list = list->next;

i++;

}

node->next = list->next;

list->next = node;

}

void Delete(CirList *list)

{

CirList *temp,*saveHead = list;;

printf("輸入刪除位置:");

int position,i=0;

scanf("%d",&position);

//尋找插入的前驅

while(list != NULL && i < position-1)

{

list = list->next;

i++;

}

temp = list->next;

list->next = temp->next;

free(temp);

}

void Output(CirList *list)

{

CirList *p = list->next;

printf("鏈表中所有數據如下:\n");

while(p != list)

{

printf("姓名:%c\n",p->data->name);

printf("年齡:%d\n",p->data->age);

p = p->next;

}

}

void menu()

{

printf("*****循環鏈表練習*****\n");

printf(" * 1---初始化鏈表\n");

printf(" * 2---刪除數據\n");

printf(" * 3---插入數據\n");

printf(" * 4---輸出數據\n");

printf(" * 0---退出\n");

printf("********************\n");

}

int main()

{

CirList *list;

list = InitListhead();

int i=0;

printf("初始化數據:\n");

//while(i<3)

{

//InitList(list);

//i++;

}

int choose;

do

{

menu();

printf("輸入您的選擇:");

scanf("%d",&choose);

getchar();

switch(choose)

{

case 1:

InitList_2(list);

break;

case 2:

Delete(list);

break;

case 3:

Insert(list);

break;

case 4:

Output(list);

break;

}

}while(choose !=0);

return 0;

}

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

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

相關文章

關于Eclipes的Logcat無法打印消息的解決辦法

轉自&#xff1a;http://blog.csdn.net/harry211/article/details/8453532 調試程序需要打印一些消息出來&#xff0c;logcat不好用的話就很麻煩了。這個問題折騰了好久&#xff0c;為啥就是不出來呢&#xff1f; 上網找了很多解決辦法&#xff1a; 重啟eclipse 重啟adb 重啟…

17:文字排版

17:文字排版 查看提交統計提問總時間限制: 1000ms內存限制: 65536kB描述給一段英文短文&#xff0c;單詞之間以空格分隔&#xff08;每個單詞包括其前后緊鄰的標點符號&#xff09;。請將短文重新排版&#xff0c;要求如下&#xff1a; 每行不超過80個字符&#xff1b;每個單詞…

解決AttributeError: 'str' object has no attribute 'decode'報錯問題

順著報錯文件點進去&#xff0c;找到query query.decode(errors‘replace’) 將decode修改為encode即可

c語言指針數組課件,C語言指針與數組教程課件.ppt

C語言指針與數組教程;教學要求;本章主要內容;引子;#include void swap ( int x, int y ) { printf("調用時&#xff1a;x地址為&#xff1a;%p, 值為&#xff1a;%d\n",&x,x); printf("調用時&#xff1a;y地址為&#xff1a;%p, 值為&#xff1a;%d\n"…

Android控制EditText的焦點

在項目中&#xff0c;一進入一個頁面, EditText默認就會自動獲取焦點。 那么如何取消這個默認行為呢&#xff1f; 在網上找了好久&#xff0c;有點 監聽軟鍵盤事件&#xff0c;有點 調用 clearFouse()方法&#xff0c;但是測試了都沒有&#xff01; xml中也找不到相應的屬性可以…

解決python中html 代碼被注釋掉 依舊被解釋導致報錯ERROR:tornado.access:500 GET /home (xxx.xxx.xxx.xxx)

ERROR:tornado.access:500 GET /home (xxx.xxx.xxx.xxx) 注釋的是Html代碼&#xff0c;是給瀏覽器看的。 Html里的代碼還是要執行。注釋python代碼用{# #}

springMvc 傳子 bean 中有bean

2019獨角獸企業重金招聘Python工程師標準>>> bean 類型 如下 1. json 字符串 $.ajax({ url :${ctx}/test/testData/f1?bookjava, type: post, dataType : "json", con…

通過rsync搭建一個遠程備份系統(二)

Rsyncinotify實時備份數據 rsync在同步數據的時候&#xff0c;需要掃描所有文件后進行對比&#xff0c;然后進行差量傳輸&#xff0c;如果文件達到了百萬或者千萬級別以上是&#xff0c;掃描文件的時間也很長&#xff0c;而如果只有少量的文件變更了&#xff0c;那么此時rsync是…

C語言掃地雷游戲的題目簡介,C語言程序設計課程設計(論文)-掃地雷游戲.doc...

C語言程序設計課程設計(論文)-掃地雷游戲遼 寧 工 業 大 學C語言程序設計 課程設計(論文)題目&#xff1a; 掃地雷游戲院(系)&#xff1a; 軟件學院專業班級: 電子商務091班學 號:學生姓名&#xff1a;指導教師&#xff1a;教師職稱&#xff1a; 助 教起止時間&#xff1a;2009…

關于地圖中軌跡的平滑移動的實現

很多人應該都有類似的經歷&#xff0c;叫完車&#xff0c;想看看車離我還有多遠距離&#xff1f;但手機屏幕上的車不是一動不動&#xff0c;就是一跳一跳的漂移。 目前市面上大多產品“軌跡平滑移動”做的并不好。 市面上只有快的打車和一號專車實現了平滑移動&#xff0c;那…

查看centos中的用戶和用戶組

1、用戶列表文件&#xff1a;/etc/passwd/ 2、用戶組列表文件&#xff1a;/etc/group 3、查看系統中有哪些用戶&#xff1a; cut -d : -f 1 /etc/passwd 4、查看可以登錄系統的用戶&#xff1a; cat /etc/passwd | grep -v /sbin/nologin | cut -d : -f 1 5、查看用戶操作…

【Android】關于參數的傳遞問題

最近遇到了一個bug&#xff0c;在debug條件下可以看出更改后的值&#xff0c;但是在最終顯示的結果中確實沒有更改的值。經過很多次的調試后&#xff0c;才發現最后的原因竟然是因為參數傳遞的時候并沒有將更改后的值傳遞給最終變量。 這時才意識到java中只存在值傳遞&#xff…

android按鈕響應事件嗎,Android 按鈕響應事件的幾種方式

目錄1.在布局中指定onClick屬性布局代碼android:id"id/btn1"android:layout_width"wrap_content"android:layout_height"wrap_content"android:text"button1"android:onClick"click"/>android:id"id/btn2"andr…

Android 開源優秀 Library 推薦

之后的每月會推薦一些優秀的開源 Android libraries&#xff0c;不僅僅是學習&#xff0c;也可以方便的使用到項目中&#xff0c;避免重復的造輪子。 PageIndicatorView 如果你需要在 ViewPager 中指明當前處于哪個畫面中&#xff0c;PageIndicatorView是你的不二選擇。而且真…

Vue2.0王者榮耀助手

vue-gok vue2.0-王者榮耀助手 項目使用的是帶玩游戲平臺提供的API&#xff0c;由于騰訊公司王者榮耀游戲關閉了查看其它人的戰績功能&#xff0c;帶玩平臺受其影響&#xff0c;已將API暫時關閉&#xff0c;所以無法獲得穩定的 DAIWAN-API-TOKEN ,所以會出現DAIWAN-API-TOKEN令…

訪問對象的屬性和方法

class Person(object):name ""age 0height 0weight 0def run(self):print("run")def eat(self,food):print("eat"food)def openDoor(self):print("我已經打開了門")def fillEle(self):print("我已經把大象裝進了冰箱")de…

Android mc怎么和win10聯機,我的世界手機版/win10版聯機完美互通方法

我的世界手機版玩家想要更加方便的操作&#xff1f;0.12.1更新之后&#xff0c;你除了能使用手柄進行方便的操作之外&#xff0c;現在你能完全擺脫小屏幕蹩腳的操作了&#xff01;win10版在9月9日進行了重大更新&#xff0c;我們能直接使用win10的電腦玩我的世界&#xff0c;而…

十大基礎算法

做為程序員&#xff0c;以下著十大10大基礎實用算法是必須知道的。

[HNOI2004]L語言

1212: [HNOI2004]L語言 Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 1507 Solved: 666[Submit][Status][Discuss]Description 標點符號的出現晚于文字的出現&#xff0c;所以以前的語言都是沒有標點的。現在你要處理的就是一段沒有標點的文章。 一段文章T是由若干小寫字…

對象的初始狀態(構造函數)

class Person(object):# name ""# age 0# height 0# weight 0def run(self):print("run")def eat(self,food):print("eat"food)def __init__(self,name,age,height,weight):# print(name,age,weight,height)print("這里是init")sel…