用尾插法建立一个单链表,输出结点个数,插入或删除一个结点,并实现按指定序号查找结点 完成单链表的建立(尾插法)、取值、查找、插入、删除、释放。

\u7528\u5934\u63d2\u6cd5\u6216\u5c3e\u63d2\u6cd5\u5efa\u7acb\u5e26\u5934\u8282\u70b9\u7684\u5355\u94fe\u8868\u3002\u5b9e\u73b0\u5355\u94fe\u8868\u4e0a\u7684\u63d2\u5165\u5220\u9664\u67e5\u627e\u4fee\u6539\u8ba1\u6570\u8f93\u51fa\u7b49\u57fa\u672c\u64cd\u4f5c\u7684\u4ee3\u7801

typedef struct lista{
struct lista *next;
int data;
}list;
void insert(list *h);
void del(list *h);
int main()
{
int flag;
list *head=(list *)malloc(sizeof(list));
head->next=NULL;
while(1)
{

#include
using namespace std;
class List
{
private:
class Node
{
public:
int m_data;
Node* next;
Node(int data):m_data(data),next(NULL){}
};
Node* m_head;
public:
List():m_head(NULL){}
~List()
{
clear();
}
void clear()//\u91ca\u653e
{
Node* p = m_head;
for(;p!=NULL;)
{
p = p->next;
delete m_head;
m_head = p;
}
m_head = NULL;
}
void insert(int data)//\u63d2\u5165\uff08\u5c3e\u63d2\u6cd5\uff09
{
Node* q = new Node(data);
if(m_head == NULL)
{
m_head = q;
return;
}
Node* p = m_head;
for(;p->next != NULL;p = p->next);
p->next = q;
}
int getdata(int n)//\u53d6\u503c
{
Node* p = m_head;
while(--n)
{
if(p == NULL)
return -1;//\u8868\u793a\u8d85\u51fa\u94fe\u8868\u4e2d\u7684\u8282\u70b9\u4e2a\u6570
p = p->next;
}
return p->m_data;
}
int find (int data)
{
Node* p = m_head;
int n = 1;
while(p!=NULL)
{
if(p->m_data == data)
return n;
n++;
p = p->next;
}
return 0;//\u8868\u793a\u6ca1\u6709\u8be5\u6570\u636e
}
};
int main()
{
List ls;
ls.insert(3);
ls.insert(6);
int i = ls.getdata(2);//\u53d6\u7b2c\u4e8c\u4e2a\u63d2\u5165\u7684\u503c
cout << i << endl;
i = ls.find(3);//\u7b2c\u51e0\u4e2a\u63d2\u5165\u503c\u4e3a3
cout << i << endl;
return 0;
}

#include"stdio.h"
#include<malloc.h>

typedef char ElemType;

typedef struct LNode
{ElemType data;
struct LNode *next;
}LinkList;

void CreatListF(LinkList *&L,ElemType a[],int n) //头插法建表
{
LinkList *s;int i;
L=(LinkList *)malloc(sizeof(LinkList));
L->next=NULL;
for(i=0;i<n;i++)
{
s=(LinkList *)malloc(sizeof(LinkList));
s->data=a[i];
s->next=L->next;
L->next=s;
}
}

void CreateListR(LinkList *&L,ElemType a[],int n) //尾插法建表
{
LinkList *s,*r;int i;
L=(LinkList *)malloc(sizeof(LinkList));
r=L;
for(i=0;i<n;i++)
{
s=(LinkList *)malloc(sizeof(LinkList));
s->data=a[i];
r->next=s;
r=s;
}
r->next=NULL;
}

void InitList(LinkList *&L) //初始化线性表
{
L=(LinkList *)malloc(sizeof(LinkList));
L->next=NULL;
}

void DestroyList(LinkList *&L) //销毁线性表
{
LinkList *p=L,*q=p->next;
while(q!=NULL)
{
free(p);
p=q;
q=p->next;
}
free(p);
}

int ListEmpty(LinkList *L) //判断线性表是否为空
{
return(L->next==NULL);
}

int ListLength(LinkList *L) //求线性表的长度
{
LinkList *p=L;int n=0;
while(p->next!=NULL)
{
n++;p=p->next;
}
return(n);
}

void DispList(LinkList *L) //输出线性表
{
LinkList *p=L->next;
while(p!=NULL)
{
printf("%c",p->data);
p=p->next;
}
}

int GetElem(LinkList *L,int i,ElemType &e) //求线性表中某个数据元素值
{
int j=0;
LinkList *p=L;
while(j<i&&p!=NULL)
{
j++;p=p->next;
}
if(p==NULL)
return 0;
else
{
e=p->data;return 1;
}
}

int LocateElem(LinkList *L,ElemType e) //按元素值查找
{
LinkList *p=L->next;
int i=1;
while(p!=NULL&&p->data!=e)
{
p=p->next;i++;
}
if(p==NULL)return(0);
else return(i);
}

int ListInsert(LinkList *&L,int i,ElemType e) //插入数据元素
{
int j=0;
LinkList *p=L,*s;
while(j<i-1&&p!=NULL)
{
j++;p=p->next;
}
if(p==NULL)return 0;
else
{
s=(LinkList *)malloc(sizeof(LinkList));
s->data=e; s->next=p->next; p->next=s;
return 1;
}
}

int ListDelete(LinkList *&L,int i,ElemType &e) //删除数据元素
{
int j=0;
LinkList *p=L,*q;
while(j<i-1&&p!=NULL)
{
j++;p=p->next;
}
if(p==NULL)
return 0;
else
{
q=p->next;
if(q==NULL)return 0;
e=q->data;
p->next=q->next;
free(q);
return 1;
}
}

int main()
{
ElemType e,a[5]={'a','b','c','d','e'};
LinkList *h;

InitList(h); //初始化顺序表h
CreateListR(h,&a[0],5); //依次采用尾插入法插入a,b,c,d,e元素
printf("单链表为:");
DispList(h); printf("\n"); //输出顺序表h

printf("该单链表的长度为:");
printf("%d",ListLength(h)); printf("\n"); //输出顺序表h的长度
if(ListEmpty(h)) printf("该单链表为空。\n");
else printf("该单链表不为空。\n"); //判断顺序表h是否为空

GetElem(h,3,e);printf("该单链表的第3个元素为:");
printf("%c",e); printf("\n"); //输出顺序表h的第3个元素
printf("该单链表中a的位置为:");
printf("%d",LocateElem(h,'a')); printf("\n"); //输出元素'a'的位置

ListInsert(h,4,'f'); //在第4个元素位置插入'f'素
printf("在第4 个元素位置上插入'f'后单链表为:");
DispList(h); printf("\n"); //输出顺序表h

ListDelete(h,3,e); //删除L的第3个元素
printf("删除第3个元素后单链表为:");
DispList(h); printf("\n"); //输出顺序表h

DestroyList(h); //释放顺序表h
return 0;
}

  • 鐢ㄥご鎻掓硶灏炬彃娉,寤虹珛閾捐〃瀹炵幇杈撳嚭銆佹煡鎵俱佹彃鍏ャ佸垹闄ゃ侀摼琛ㄥ悎骞 銆傝阿璋...
    绛旓細struct node { int data;node *next;};node * createonhead(){ node *head=NULL;node *p;int d;cin>>d;while(d!=0){ p=new node;p->data=d;p->next=NULL;if(head==NULL)head=p;else { p->next=head;head=p;} cin>>d;} return head;} node * createontail(){ node *...
  • 鍗曢摼琛ㄧ殑杩愮畻涔寤虹珛鍗曢摼琛
    绛旓細鍚﹀垯閾捐〃head闈炵┖ 鏈鍚庝竴涓熬缁撶偣*r鏄粓绔粨鐐 搴斿皢鍏舵寚閽堝煙缃┖ 锛 锛 灏炬彃娉曞缓甯﹀ご缁撶偣鐨鍗曢摼琛 鈶犲ご缁撶偣鍙婁綔鐢ㄥご缁撶偣鏄湪閾捐〃鐨勫紑濮嬬粨鐐逛箣鍓嶉檮鍔犱竴涓粨鐐 瀹冨叿鏈変袱涓紭鐐:鈷堢敱浜庡紑濮嬬粨鐐圭殑浣嶇疆琚瓨鏀惧湪澶寸粨鐐圭殑鎸囬拡鍩熶腑 鎵浠ュ湪閾捐〃鐨勭涓涓綅缃笂鐨勬搷浣滃氨鍜屽湪琛ㄧ殑鍏跺畠浣嶇疆涓婃搷浣滀竴鑷 鏃犻』杩涜...
  • 浣跨敤灏炬彃娉曞缓绔甯﹀ご缁撶偣閾捐〃銆傝緭鍏ヤ互0琛ㄧず杈撳叆缁撴潫銆傚湪鍚庨潰stat end涔嬮棿...
    绛旓細return 1;} node * create(){ node * L;InitList(&L);//鏋勯犱竴涓┖鐨勭嚎鎬閾捐〃L printf("鍦↙鐨勮〃灏句緷娆鎻掑叆1-10涔嬪悗锛歕n");int j;for (j=1; j<=10; ++j){ ListInsert(L,j,j);//绗簩涓弬鏁版槸j琛ㄧず鏄灏炬彃娉 } return L;} /***end***/ / 杈撳嚭缁撴灉锛--- 鍦↙鐨勮〃灏句緷...
  • 鐢ㄥご鎻掑叆娉曞缓绔嬪崟閾捐〃骞跺湪琛ㄤ腑瀹炵幇鎻掑叆鎿嶄綔
    绛旓細灏炬彃娉曞缓绔嬪崟閾捐〃鐨勭畻娉曞涓嬶細LinkList CreatList2(LinkList &L){ //浠庤〃澶村埌琛ㄥ熬姝e悜寤虹珛鍗曢摼琛↙,姣忔鍧囧湪琛ㄥ熬鎻掑叆鍏冪礌 int x; // 璁惧厓绱犵被鍨嬩负鏁村瀷 L=(LinkList)malloc(sizeof(LNode)); LNode *s, *r=L; //r 涓鸿〃灏炬寚閽 scanf ("%d", &x); //杈撳叆缁撶偣...
  • 濡備綍鍒涘缓鍗曢摼琛?
    绛旓細寤虹珛鍗曢摼琛鐨勫父鐢ㄦ柟娉曟湁涓ょ锛氬ご鎻掓硶寤鸿〃銆灏炬彃娉曞缓琛 寤虹珛鍗曢摼琛ㄧ殑甯哥敤鏂规硶鏈変袱绉嶃備笅闈互椤哄簭瀛樺偍涓轰緥鏉ュ彊杩般(1)銆澶存彃娉曞缓琛 璇ユ柟娉曚粠涓涓┖琛ㄥ紑濮嬶紝璇诲彇鏁扮粍a涓殑瀛楃锛岀敓鎴愭柊缁撶偣锛屽皢璇诲彇鐨勬暟鎹瓨鏀惧埌鏂扮粨鐐圭殑鏁版嵁鍩熶腑锛岀劧鍚庡皢鏂扮粨鐐规彃鍏ュ埌褰撳墠閾捐〃鐨勮〃澶翠笂锛岀洿鍒扮粨鏉熶负姝傜畻娉曞涓嬶細void ...
  • ...1)鐢ㄥご鎻掓硶(鎴灏炬彃娉)寤虹珛甯﹀ご缁撶偣鐨鍗曢摼琛;
    绛旓細printf("璇烽夋嫨閾捐〃鎿嶄綔:\n 1:鎻掑叆\n 2锛氬垹闄n杈撳叆鏁板瓧杩涜閫夋嫨:"); scanf("%d",&flag); if(flag==1) insert(head); else if(flag==2) del(head); else printf("杈撳叆鏈夎锛岃閲嶆柊閫夋嫨锛乗n"); }}void insert(list *h)...
  • 姹傝В涓閬撴暟鎹粨鏋勭殑棰樼洰,灏炬彃娉曞缓绔嬪崟閾捐〃璇烽棶涓嬮潰鐨刾=s鏄粈涔堟剰鎬濇湁...
    绛旓細瑕佷娇p濮嬬粓鎸囧悜鍗曢摼琛鐨勬渶鍚庝竴涓粨鐐广傚湪p->next=s鍚庯紝s涓烘渶鍚庝竴涓粨鐐癸紝p=s浣縫閲嶆柊涓烘渶鍚庣粨鐐广
  • 鏍囬 澶存彃娉曞拰灏炬彃娉鎵鍒涘缓鐨勭浉鍚屾暟鎹粍鍚堢殑鍗曢摼琛鏈変粈涔堜笉鍚?_鐧惧害鐭 ...
    绛旓細澶存彃娉曟槸鏂板鑺傜偣鎬绘槸鎻掑湪澶撮儴锛屽熬鎻掓硶鏄皢鏂板鑺傜偣鎻掑湪閾捐〃灏閮紝浜岃呭湪鍒涘缓鍗曢摼琛鏈夊緢澶т笉鍚屻傚ご鎻掓硶浼氭敼鍙樻暟鎹緭鍏ラ『搴忋傚湪涓ユ牸瑕佹眰鏁版嵁椤哄簭涓嶅彉鏃讹紝鍙互鐢ㄥ熬鎻掓硶銆傚熬鎻掓硶鏂版潵鐨勮妭鐐规彃鍏ュ埌褰撳墠鑺傜偣鏈熬澶勩傚熬鎻掓硶绋冲畾鎬ф洿濂姐
  • 澶鎻掓硶寤虹珛鍗曢摼琛,浣嗘槸杩欎釜q=p; 鏄粈涔堟剰鎬???
    绛旓細杩欎釜涓嶆槸澶存彃娉曞缓绔鍗曢摼琛紝鑰屾槸灏炬彃娉曞缓绔閾捐〃锛宷鏄綋鍓嶇粨鐐癸紝q->next=p;灏辨槸鎶婂垎閰嶅嚭鏉ョ殑缁撶偣鏀惧埌褰撳墠q缁撶偣鐨勪笅涓閾撅紝鎺ョ潃杩欎釜q=p锛屽氨鏄妸褰撳墠缁撶偣璁剧疆涓哄垰鍒嗛厤鐨勫嚭鏉ョ殑缁撶偣锛岃繖鏍穛鎬绘槸鍦ㄩ摼灏撅紝鎵浠ユ槸灏炬彃娉曘傝鏀规垚澶存彃娉曪紝灏辫鍘绘帀q=p;杩欎竴琛岋紝娉ㄦ剰绗竴閾炬病鏈夋暟鎹紝绗竴涓暟鎹槸h->...
  • 鍗曢摼琛ㄥ熬鎻掓硶浠g爜r->next=s涓轰粈涔堟绘槸寮曞彂浜嗗紓甯:鍐欏叆璁块棶鏉冮檺鍐茬獊,r...
    绛旓細鍦ㄤ綘鎻愪緵鐨勪唬鐮佷腑锛屽紓甯稿彲鑳芥槸鐢变簬r鎸囬拡鏈垵濮嬪寲瀵艰嚧鐨勩備负浜嗚В鍐宠繖涓棶棰橈紝浣犻渶瑕佸湪浣跨敤r鎸囬拡涔嬪墠锛屼负鍏跺垎閰嶅唴瀛樼┖闂淬備互涓嬫槸涓涓娇鐢鍗曢摼琛ㄥ熬鎻掓硶鎻掑叆鑺傜偣鐨勭ず渚嬩唬鐮侊細```c++ include <iostream> struct Node { int data;Node* next;};void insertNode(Node*& head, int value) { Node* newNode...
  • 扩展阅读:钢丝绳三三插法教程 ... 单链表尾插法图解 ... 绳头插接方法图 ... 头插法和尾插法图解 ... 插绳头教程 ... 单链表的逆置头插法 ... 钢丝绳圆头插法视频 ... 建立单链表的完整代码 ... 尾插法建立单链表并输出 ...

    本站交流只代表网友个人观点,与本站立场无关
    欢迎反馈与建议,请联系电邮
    2024© 车视网