数据结构单链表插入x作为第i个元素,对i容错当i<0时在单链表最前面插入x,i>length时在单链表最后插入x 设计一个在不带头结点的链表的第i个元素之前插入一个元素的算法...

\u5728\u6570\u636e\u7ed3\u6784\u4e2d\u521b\u5efa\u4e00\u4e2a\u5355\u94fe\u8868\uff0c\u8981\u6c42\u5355\u94fe\u8868\u7684\u5143\u7d20\u6309\u5347\u5e8f\u6392\u5217\uff0c\u8f93\u51fa\u5355\u94fe\u8868\uff0c\u7136\u540e\u63d2\u5165\u5143\u7d20X\u4fdd\u6301\u5355\u94fe\u8868\u7684\u5347...

\u7ed9\u4f60\u51fd\u6570\u81ea\u5df1\u4e5f\u5f97\u7ec3\u4e60\u5199\u554a\uff01
//\u94fe\u8868\u6307\u9488\u5b9e\u73b0
#include
#include //\u9700\u8981malloc.h
struct node
{
int i;
struct node *pre,*next;
};
struct node head;
void init()//\u521d\u59cb\u5316
{
head.i=0;
head.pre=NULL;
head.next=NULL;
}
struct node *ins(struct node *p,int i) //\u5728p\u4f4d\u7f6e\u540e\u63d2\u5165i
{
struct node *t;
t=(struct node *)malloc(sizeof(struct node));
t->i=i;
if(p->next!=NULL)
p->next->pre=t;
t->next=p->next;
p->next=t;
t->pre=p;
return t;
}
void del(struct node *p) //\u5220\u9664p\u4f4d\u7f6e(p!=head)
{
if(p->next!=NULL)
p->next->pre=p->pre;
p->pre->next=p->next;
free(p);
}
\u6392\u5e8f\u90e8\u5206\u53ef\u4ee5\u4f7f\u7528\u5192\u6ce1\u6216\u8005\u5feb\u6392\uff0c\u9009\u6392

#define OK 1
#define ERROR 0

typedef int Status;
typedef int ElemType;

typedef struct LNode { //\u7ed3\u70b9\u7c7b\u578b
ElemType data; // \u6570\u636e\u57df
struct Lnode *next; // \u6307\u9488\u57df
} LNode;

typedef LNode * LinkList; //\u5355\u94fe\u8868\u7c7b\u578b

Status ListInsert_L(LinkList &L, int i, ElemType e) {
// L \u4e3a\u4e0d\u5e26\u5934\u7ed3\u70b9\u7684\u5355\u94fe\u8868\u7684\u5934\u6307\u9488\uff0c\u5728\u94fe\u8868\u4e2d\u7b2ci \u4e2a\u7ed3\u70b9\u4e4b\u524d\u63d2\u5165\u65b0\u7684\u5143\u7d20 e
LNode *p = L;
int j = 1;
if(1==i)
{
s =(LNode*)malloc(sizeof(LNode)); // \u751f\u6210\u65b0\u7ed3\u70b9
if ( s == NULL) return ERROR;
s->data = e;
s->next = p; // \u63d2\u5165
L = s; // \u63d2\u5165
}
else{
while (p && j < i-1)
{ p = p->next; ++j; } // \u5bfb\u627e\u7b2c i-1 \u4e2a\u7ed3\u70b9
if (!p || j > i-1)
return ERROR; // i \u5927\u4e8e\u8868\u957f\u6216\u8005\u5c0f\u4e8e1
s =(LNode*)malloc(sizeof(LNode)); \u751f\u6210\u65b0\u7ed3\u70b9
if ( s == NULL) return ERROR;
s->data = e;
s->next = p->next; // \u63d2\u5165
p->next = s; // \u63d2\u5165
}
return OK;
} // LinstInsert_L

Status Insert(LinkList *L,datatype x,int i) {
LinkList *q,*p = L->next;
int pos = 0;
int len = lenght(L);// 表L的长度
q = (LinkList *)malloc(sizeof(LinkList));
if(L == NULL || L->next == NULL || q == NULL) return ERROR;
q->data = x;
if(i < 1) {// 插在第一个结点位置
q->next = p;
p->next = q;
return OK:
}
if(i > len) {// 插在表尾
while(p) p = p->next;
p->next = q;
q->next = NULL:
return OK;
}
while(p->next && pos < i) {
++i;
p = p->next;
}
if(i == pos) { // 插入到指定位置
q->next = p->next;
p->next = q;
}
return OK;//成功插入
}


  • 璁句竴涓鍗曢摼琛鏄竴涓潪閫掑噺鏈夊簭琛 璇曞啓涓涓畻娉曞皢x鎻掑叆鍏朵腑 骞朵繚鎸佹湁...
    绛旓細if(p==NULL) printf("閾捐〃涓虹┖");else { while (p!=NULL){ printf("%c",p->data);//鍏堣繖鏍峰啓锛屾渶鍚庤淇敼杈撳嚭涔嬮棿鐨勯棿璺 p=p->next;} } } //void insert(linklist*head,int num) //鎻掑叆鍑芥暟锛x涓瑕佹彃鍏ョ殑缁撶偣涓婄殑鏁版嵁 void insert(linklist*head,datatype num/* 绫诲瀷瑕佷繚鎸佷竴鑷...
  • 涓嬮潰杩欎釜鐢–++瀹炵幇鍗曢摼琛鐨勭▼搴忔庝箞閿欎簡鍟?
    绛旓細} //鎻掑叆 void LinkList::Insert(int i,int x){ //灏嗘柊鍏冪礌x鎻掑叆鍦閾捐〃涓绗琲涓缁撶偣涔嬪悗 LinkNode *current=Locate(i);if(current==NULL) cout<<"鎻掑叆涓嶆垚鍔"<<endl;LinkNode *newNode=new LinkNode;if(newNode==NULL) {cout<<"瀛樺偍鍒嗛厤閿欒"<<endl;} newNode->data=x;...
  • 鍦鏁版嵁缁撴瀯涓垱寤轰竴涓鍗曢摼琛,瑕佹眰鍗曢摼琛ㄧ殑鍏冪礌鎸夊崌搴忔帓鍒,杈撳嚭鍗曢摼琛...
    绛旓細//閾捐〃鎸囬拡瀹炵幇 include<stdio.h> include<malloc.h> //闇瑕乵alloc.h struct node { int i;struct node *pre,*next;};struct node head;void init()//鍒濆鍖 { head.i=0;head.pre=NULL;head.next=NULL;} struct node *ins(struct node *p,int i) //鍦╬浣嶇疆鍚鎻掑叆i { struct node...
  • 缂栧啓绠楁硶鍒嗗埆灏鍗曢摼琛鐨勫垱寤,鎻掑叆鍜屽垹闄ょ敤C璇█瀹炵幇
    绛旓細s->data=x;s->next=r->next;r->next=s;r=s;scanf("%d",&x);} return H;} 杩欎袱绉嶅缓绔閾捐〃鎵瑕佸仛鐨勯瑕佸伐浣滄槸鐢宠涓涓ご缁撶偣锛屽苟涓斿皢澶寸粨鐐圭疆绌猴紙NULL锛夛紱鎻掑叆锛氫唬鐮佸涓嬶細int Insert_LinkList(LinkList H,int i, ElemType x)/*鍦ㄩ摼琛℉涓绗琲涓浣嶇疆鎻掑叆涓涓涓篨鐨勫厓绱*/ { LNode...
  • 鏁版嵁缁撴瀯銆傘傚悜椤哄簭琛ㄤ腑绗琲涓鍏冪礌涔嬪悗鎻掑叆涓涓涓簒鐨勫厓绱
    绛旓細int InsElem(SqList &L,ElemType x,int i){ int j;if(i<1||i>L.length+1) return 0;if(L.length==MaxSize) return 0;for(j=L.length-1;j>=i;j--)L.data[j+1]=L.data[j ];L.data[i]=x;L.length++;return 1;} ...
  • 鍗佷竾鐏,灏藉揩銆鏁版嵁缁撴瀯缂栫▼ ,鍗曢摼琛鐨勭涓涓粨鐐逛粠琛ㄥご绉诲埌琛ㄥ熬_鐧惧害...
    绛旓細cout<<"娌℃湁鍊间负"<<x<<"鐨勭粨鐐 "<<endl;} else { k->next=p->next;delete p;} } void insert(int x)//鎻掑叆data鍩熷涓簒鐨勭粨鐐(榛樿鍘閾捐〃涓鍗囧簭鎺掑垪){ Linklist *s,*p,*k;s=new Linklist;s->data=x;s->next=NULL;k=p=L;while(p!=NULL){ if(p->data>=x)break;k=p...
  • C璇█涓鏁版嵁缁撴瀯涓殑鍗曞悜閾捐〃鐨勯棶棰;
    绛旓細//鍒ゆ柇绌洪摼琛 int isNullist_linkq(LinkList list){ return(list->link==NULL);} //鍦鍗曢摼琛涓眰鏌愬厓绱犵殑瀛樺偍浣嶇疆 PNode locate_link(LinkList list,int x){//鍦╨ist 甯︽湁澶寸粨鐐圭殑鍗曢摼琛ㄤ腑鎵剧涓涓涓簒鐨勭粨鐐瑰瓨鍌ㄤ綅缃 PNode p;if(list->link==NULL) return(NULL);p=list->link;whi...
  • 缂栧啓鍦ㄥ惊鐜閾捐〃绗琲涓鑺傜偣鍓鎻掑叆涓涓妭鐐圭殑鍑芥暟: int InsertNode ( struct...
    绛旓細浠g爜瀹炵幇锛歯ode * InsertNode (node * head, int x){ node * last, * current, * p;//瑕鎻掑叆鐨勭粨鐐 p = (node *)malloc(sizeof(node));p->num = x;//绌鸿〃鎻掑叆 if(head == NULL){ head = p;p->next = NULL;return head;} //鎵炬彃鍏ヤ綅缃 current = head;while(x > current-...
  • 鍦ㄦ湁n涓妭鐐圭殑鍗曢摼琛涓绗琲涓浣嶇疆鎻掑叆涓涓妭鐐,瑕佺敤鍒版瀯閫犲嚱鏁癱reat()鍜...
    绛旓細struct student *create(int n){ int i;struct student *head=NULL, *p1, *p2;head=p2=(struct student * ) malloc(LEN);scanf("%d%f",&p2->num,&p2->score);for(i=2;i<=n;i++){ p1= ( struct student * )malloc(LEN);scanf("%d%f",&p1->num,&p1->score);p2->next=p1;...
  • 鏁版嵁缁撴瀯閾捐〃鎻掑叆
    绛旓細{ ElemType data;struct LNode * next;}LNode, * LinkList;/*鍦ㄥ甫澶寸粨鐐圭殑鍗曢摼琛涓绗琲涓浣嶇疆锛堜粠1寮濮嬶級鎻掑叆鍏冪礌锛屼粛淇濇寔閫掑鎬*/ int ListInsert_L(LinkList head,ElemType e){ LNode *p,*pre,*s;s=(LNode *)malloc(sizeof(LNode));//鐢宠缁撶偣瀛樺偍绌洪棿 s->data=e;//缁欒妭鐐鏁版嵁鍩...
  • 扩展阅读:头插法 ... 数据结构链表完整代码 ... 数据结构单链表的逆置 ... 用c实现单链表 ... 单链表完整代码 ... 单链表的心得体会 ... 链表的删除为什么需要别的 ... 数据结构单链表的实现 ... 数据结构单链表的取值 ...

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