首页 / C语言 / (续)顺序表之单循环链表(C语言实现)
(续)顺序表之单循环链表(C语言实现)
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了(续)顺序表之单循环链表(C语言实现),小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含4323字,纯文字阅读大概需要7分钟。
内容图文
单 循环 链表和单链表的唯一区别在于单循环链表的 最后一个节点的指针域指向第一个节点 ,
使得整个链表形成一个 环 .
C实现代码如下:
#include<stdio.h> typedef struct node { int data; struct node *next; }Node; //链表的初始化 Node* InitList(int number) { int i; Node *pHead=(Node *)malloc(sizeof(Node)); Node *TempHead=pHead; Node *Head=pHead; int data; for(i=0;i<number;i++) { pHead=(Node *)malloc(sizeof(Node)); printf("Please input the %dst node data:\n",i+1); scanf("%d",&data); pHead->data=data; pHead->next=Head->next; TempHead->next=pHead; TempHead=TempHead->next; } return Head; } //显示链表 void ShowList(Node *Head) { Node *TempNode=Head; TempNode=TempNode->next; printf("Show List:\n"); while(TempNode->next!=Head->next) { printf("%d ",TempNode->data); TempNode=TempNode->next; } printf("%d",TempNode->data); printf("\n"); } //输出链表某个值的位置 int ListLocation(Node *Head,int data,int number) { Node *TempNode=Head; int location=1; TempNode=TempNode->next; while(TempNode->next!=Head->next) { if(TempNode->data==data) { return location; } location++; TempNode=TempNode->next; } if(location>=number) printf("Not found!"); } //输出链表某个位置的值 int ListData(Node *Head,int location,int number) { if(location>number) printf("Not found!"); Node *TempNode=Head; TempNode=TempNode->next; int i; for(i=1;i<=number;i++) { if(location==i) return TempNode->data; TempNode=TempNode->next; } } //头入法插入元素 void HeadInsertData(Node *Head,int data) { Node *TempNode=Head; Node *InsertNode=(Node *)malloc(sizeof(Node)); InsertNode->data=data; while(TempNode->next->next!=Head->next) TempNode=TempNode->next; TempNode=TempNode->next; InsertNode->next=Head->next; TempNode->next=InsertNode; Head->next=InsertNode; } //尾入插入除元素 void TailInsertData(Node *Head,int data) { Node *TempNode=Head; Node *InsertNode=(Node *)malloc(sizeof(Node)); InsertNode->data=data; while(TempNode->next->next!=Head->next) TempNode=TempNode->next; TempNode=TempNode->next; TempNode->next=InsertNode; InsertNode->next=Head->next; } //删除头结点 void HeadDeleteData(Node *Head) { Node *TempNode=Head; while(TempNode->next->next!=Head->next) TempNode=TempNode->next; TempNode->next->next=Head->next->next; Head->next=Head->next->next; } //删除尾结点 void TailDeleteData(Node *Head) { Node *TempNode=Head->next; while(TempNode->next!=Head->next) { TempNode=TempNode->next; if(TempNode->next->next==Head->next) break; } TempNode->next=Head->next; } int main() { Node *Head; int number; printf("Please input the node number:\n"); scanf("%d",&number); Head=InitList(number); printf("The initital list is:\n"); ShowList(Head); int flag; printf("\n\n"); printf("**********************Your Choice********************\n"); printf("****************1-输出链表某个值的位置***************\n"); printf("****************2-输出链表某个位置的值***************\n"); printf("****************3-头入法插入元素*********************\n"); printf("****************4-尾入法插入元素*********************\n"); printf("****************5-删除头结点*************************\n"); printf("****************6-删除尾结点*************************\n"); printf("****************0-退出*******************************\n"); printf("\n\n"); printf("Please input flag:\n"); scanf("%d",&flag); switch(flag) { case 1: { int data; printf("Please input the data you want locate:\n"); scanf("%d",&data); int location; location=ListLocation(Head,data,number); printf("The data's location is: %d",location); break; } case 2: { int location; printf("Please input the location you want data:\n"); scanf("%d",&location); int data; data=ListData(Head,location,number); printf("The location's data is: %d\n",data); break; } case 3: { int data; printf("Please input the data you want insert in head:\n"); scanf("%d",&data); HeadInsertData(Head,data); ShowList(Head); break; } case 4: { int data; printf("Please input the data you want insert in tail:\n"); scanf("%d",&data); TailInsertData(Head,data); ShowList(Head); break; } case 5: { HeadDeleteData(Head); ShowList(Head); break; } case 6: { TailDeleteData(Head); ShowList(Head); break; } case 7: { printf("You choose to exit.\n"); break; } } return 0; }结果图:
转载请注明作者:小刘
原文:http://blog.csdn.net/u013018721/article/details/38173511
内容总结
以上是互联网集市为您收集整理的(续)顺序表之单循环链表(C语言实现)全部内容,希望文章能够帮你解决(续)顺序表之单循环链表(C语言实现)所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。