写出建立包含n个元素结点的带头结点单链表的算法\\\c语言版 求救:建立一个包含N个结点的单链表,将其中的相同元素删除。

\u9006\u5e8f\u8f93\u5165n\u4e2a\u6570\u636e\u5143\u7d20\u7684\u503c,\u5efa\u7acb\u5e26\u5934\u7ed3\u70b9\u7684\u5355\u94fe\u8868\u7684c\u8bed\u8a00\u7a0b\u5e8f\uff1f\u6025\u9700\uff01\uff01\uff01\uff01

#include
#include
#include

//\u51fd\u6570\u7ed3\u679c\u72b6\u6001\u4ee3\u7801
#define OK 1
#define ERROR 0
//Status\u662f\u51fd\u6570\u7684\u7c7b\u578b\uff0c\u5176\u503c\u662f\u51fd\u6570\u7ed3\u679c\u72b6\u6001\u4ee3\u7801
typedef int Status;
typedef int ElemType;

//----\u7ebf\u6027\u8868\u7684\u5355\u94fe\u8868\u5b58\u50a8\u7ed3\u6784----
typedef struct LNode{
ElemType data;
struct LNode *next;
}LNode, *LinkList;

void CreateList_L(LinkList &L,int n){
//\u9006\u4f4d\u5e8f\u8f93\u5165n\u4e2a\u5143\u7d20\u7684\u503c\uff0c\u5efa\u7acb\u5e26\u8868\u5934\u7ed3\u70b9\u7684\u5355\u94fe\u7ebf\u6027\u8868L\u3002
L = (LinkList)malloc(sizeof(LNode));
L->next = NULL; //\u5148\u5efa\u7acb\u4e00\u4e2a\u5e26\u5934\u7ed3\u70b9\u7684\u5355\u94fe\u8868
for (int i=n;i>0;--i){
LinkList p = (LinkList)malloc(sizeof(LNode)); //\u751f\u6210\u65b0\u7ed3\u70b9
scanf("%d",&p->data); //\u8f93\u5165\u5143\u7d20\u503c
p->next = L->next;L->next = p; //\u63d2\u5165\u5230\u8868\u5934
}
}//CreateList_L

Status ListShow_L(LinkList L){
//\u5c06\u5e26\u5934\u7ed3\u70b9\u7684\u5355\u94fe\u7ebf\u6027\u94fe\u8868L\u7684\u5143\u7d20\u5217\u51fa\u3002
LinkList p = L;
while(p->next){p = p->next;printf("%d ",p->data);}
return OK;
}//ListShow_L

void main(){
int n;
printf("\u8bf7\u8f93\u5165\u5c06\u8981\u8f7d\u5165\u94fe\u8868\u7684\u5143\u7d20\u4e2a\u6570:");
scanf("%d",&n); //\u521d\u59cb\u5316\u7ebf\u6027\u94fe\u8868\u5143\u7d20\u7684\u4e2a\u6570
printf("\u8bf7\u9006\u5e8f\u8f93\u5165%d\u4e2a\u5143\u7d20\u7684\u503c:\n",n);
LinkList L;
CreateList_L(L,n); //\u521d\u59cb\u5316\u7ebf\u6027\u94fe\u8868
ListShow_L(L); //\u8f93\u51fa\u7ebf\u6027\u94fe\u8868\u5143\u7d20\u7684\u503c
}

#define NULL 0
typedef struct node{
int data;
struct node *next;
}linkedlode,*linklist;
main()
{
void print(linklist L);
void del(linklist L);
int i,dat[20]={1,2,2,3,3,4,4,4,5,6,7,7,7,7,0};/*\u4ece\u6570\u7ec4\u4e2d\u7684\u5143\u7d20\u5efa\u7acb\u94fe\u8868\uff0c0\u7ed3\u675f*/
linklist L,p,q;
L=(linkedlode *)malloc(sizeof(linkedlode));
p=L;/*\u5934\u7ed3\u70b9*/
for(i=0;i<20;i++)
{
if(dat[i]==0)break;
q=(linkedlode *)malloc(sizeof(linkedlode));
q->data=dat[i];
q->next=NULL;
p->next=q;
p=q;
}
print(L);/*\u8f93\u51fa\u94fe\u8868*/
del(L);/*\u5220\u9664\u76f8\u540c\u7684\u5143\u7d20*/
print(L);
getch();
}
void print(linklist L)
{
while(L->next)
{
L=L->next;
printf("%d ",L->data);
}
printf("\n");
}

void del(linklist L)/*\u5220\u9664\u76f8\u540c\u7684\u7ed3\u70b9*/
{
linklist r,s,i;
for(i=(L)->next;i->next;i=i->next)
{
r=i;s=i->next;
while(s)
{
if(s->data==i->data)
{
if(!s->next)
{
r->next=NULL;break;
}
r->next=s->next;
s=s->next;r->next=s;
continue;
}
r=s;s=s->next;
}
}
}

dlistNode.h

#ifndef _DListNode_H
#define _DListNode_H
#include <src/ArithmeticLib/TypeDef.h>
typedef struct Node/*链表类型定义,单链表*/
{
DataType data;
struct Node *next;
}ListNode;

void DestroyList(ListNode* head);
int ListLength(ListNode* head);
void InitList(ListNode* head);
int ListEmpty(ListNode* head);
ListNode *Get(ListNode* head,int i);
ListNode* LocateElem(ListNode* head,DataType e);
int LocatePos(ListNode* head,DataType e);
int InsertList(ListNode* head,int i,DataType e);
int DeleteList(ListNode* head,int i,DataType *e);
#include <src/ArithmeticLib/DListNode.c>
#endif

DListNode.c

void DestroyList(ListNode* head)
{
ListNode *p,*q;
p=head;
while(p!=NULL)
{
q=p;
q->next = NULL;
q->data = NULL;
free(q);
p=p->next;
}
}
int ListLength(ListNode* head)
/*单链表的长度*/
{
//return 1;

ListNode *p;
int count=0;
p = head;
while(p->next!=NULL)
{
p=p->next;
count++;
}
return count;
}
void InitList(ListNode* head)
/*将单链表初始化为空。动态生成一个头结点,并将头结点的指针域置为空。*/
{
head=malloc(sizeof(ListNode));/*为头结点分配一个存储空间*/
if(head==NULL){
return;
}
head->next = NULL; /*将单链表的头结点指针域置为空*/
}
int ListEmpty(ListNode* head)
/*判断单链表是否为空,就是通过判断头结点的指针域是否为空*/
{
if(head->next==NULL) /*判断单链表头结点的指针域是否为空*/
{
return 1; /*当单链表为空时,返回1;否则返回0*/
}
return 0;
}
ListNode *Get(ListNode* head,int i)
/*查找单链表中第i个结点。查找成功返回该结点的指针表示成功;否则返回NULL表示失败。*/
{
ListNode *p;
int j;
if(ListEmpty(head)) /*在查找第i个元素之前,判断链表是否为空*/
{
return NULL;
}
if(i<1 || i > ListLength(head)) /*在查找第i个元素之前,判断该序号是否合法*/
{
//printf("不存在该节点");
return NULL;
}

j=0;
p=head;
while(p->next!=NULL&&j<i)
{
p=p->next;
j++;
}
if(j==i)
{
return p; /*找到第i个结点,返回指针p*/
}
return NULL ;/*如果没有找到第i个元素,返回NULL*/
}
ListNode* LocateElem(ListNode* head,DataType e)
/*查找线性表中元素值为e的元素,查找成功将对应元素的结点指针返回,否则返回NULL表示失败。*/
{
ListNode *p;
p = head->next; /*指针p指向第一个结点*/
while(p)
{
if(p->data!=e) /*找到与e相等的元素,返回该序号*/
{
p=p->next;
}
else
{
break;
}
}
return p;
}
int LocatePos(ListNode* head,DataType e)
/*查找线性表中元素值为e的元素,查找成功将对应元素的序号返回,否则返回0表示失败。*/
{
ListNode *p;
int i;
if(ListEmpty(head)) /*在查找第i个元素之前,判断链表是否为空*/
{
return 0;
}
p=head->next; /*指针p指向第一个结点*/
i=1;
while(p)
{
if(p->data==e) /*找到与e相等的元素,返回该序号*/
{
return i;
}
else
{
p=p->next;
i++;
//printf("%d",i);
}
}
if(!p) /*如果没有找到与e相等的元素,返回0,表示失败*/
{
return 0;
}
}
int InsertList(ListNode* head,int i,DataType e)
/*在单链表中第i个位置插入一个结点,结点的元素值为e。插入成功返回1,失败返回0*/
{
ListNode *p,*pre; /*定义指向第i个元素的前驱结点指针pre,指针p指向新生成的结点*/
int j = 0;
pre = head; /*指针p指向头结点*/

while(pre->next!=NULL && j<i-1)/*找到第i-1个结点,即第i个结点的前驱结点*/
{
pre=pre->next;
j++;
}
/*如果没找到,说明插入位置错误*/
if(pre == NULL || i > ListLength(head) + 1 || i <= 0)
{
printf("单链表插入错误");
return 0;
}

/*新生成一个结点,并将e赋值给该结点的数据域*/
p=(ListNode*)malloc(sizeof(ListNode));
if(p == NULL)
{
return 1;
}

/*保存数据*/
p->data=e;

/*插入结点操作*/
p->next=pre->next;
pre->next=p;
return 1;
}
int DeleteList(ListNode* head,int i,DataType *e)
/*删除单链表中的第i个位置的结点。删除成功返回1,失败返回0*/
{
if(ListLength(head)==0)
{
printf("单链表长度为0,删除异常");
return 0;
}

ListNode *pre,*p;
int j;
pre=head;
j=0;

while(pre->next!=NULL&&pre->next->next!=NULL&&j<i-1)/*判断是否找到前驱结点*/
{
pre=pre->next;
j++;
}
if(j!=i-1) /*如果没找到要删除的结点位置,说明删除位置错误*/
{
printf("删除位置错误 %d",i);
return 0;
}

/*指针p指向单链表中的第i个结点,并将该结点的数据域值赋值给e*/
p=pre->next;
*e=p->data;
/*将前驱结点的指针域指向要删除结点的下一个结点,也就是将p指向的结点与单链表断开*/
pre->next=p->next;
free(p); /*释放p指向的结点*/
return 1;
}

  • 澶т緺浠庝箞鐢–璇█瀹炵幇鍒濆鍖栦竴涓摼琛ㄥ晩~~~
    绛旓細void CreateList(LinkList *L,int n){ //閫嗕綅搴忚緭鍏n涓厓绱鐨勫硷紝寤虹珛甯﹁〃澶寸粨鐐圭殑鍗曢摼绾挎ц〃L int i;LinkList p;(*L) = (LinkList)malloc(sizeof(LNode));(*L)->next = NULL; //鍏寤虹珛甯﹀ご缁撶偣鐨鍗曢摼琛 for(i=n;i>0;--i){ p = (LinkList)malloc(sizeof(LNode)); //鐢熸垚...
  • 璇锋暀鍏充簬灏炬彃娉寤虹珛鍗曢摼琛ㄧ殑绠楁硶
    绛旓細鈼忓湪灏捐妭鐐*R鍚庢彃鍏ユ柊鑺傜偣*P锛涒棌灏鹃儴鎸囬拡R鎸囧悜鏂板熬閮ㄨ妭鐐*PS 濡傚浘鎵绀猴紝绾挎ц〃锛圓銆丅銆丆銆丏銆丒锛夊悗鎻掑肩殑鍒涘缓杩囩▼涓庣嚎鎬ц〃鐩稿悓銆傘愮畻娉曟弿杩般憊oid Createlist_R(Linklist &L, int n) //姝d綅搴忚緭鍏n涓厓绱鐨勫,寤虹珛甯﹁〃澶寸粨鐐圭殑鍗曢摼琛↙涓汉 { L=new LNode; //鍏堝缓绔嬩竴涓甯﹀ご缁撶偣鐨...
  • C璇█闂:寤虹珛涓涓湁涓涓粨鐐圭殑閾捐〃,鐒跺悗杈撳嚭姣忎釜缁撶偣鐨勬暟鎹
    绛旓細pNode = pTemp; //灏嗙粨灏鍏冪礌鍚戝悗绉 } cout << "鍒涘缓閾捐〃缁撴潫" << endl;}LinkNode* CLinkList::GetListNode(int _nIndex){ cout << "杩欎釜鏄寜浣嶇疆鏌ユ壘鎸囧畾浣缁撶偣鐨鎴愬憳鍑芥暟" << endl; LinkNode* pNode = m_Head->GetNodeNext(); //瀹氫箟涓涓复鏃剁殑缁撶偣鎸囬拡,鍒濆鍖栨寚鍚戝ご缁撶偣 int Temp = 0;...
  • 濡備綍鐢ㄧ嚎鎬ц〃鍌ㄥ瓨浜斾釜鏁板瓧骞惰緭鍑
    绛旓細void CreateList_Link(LinkList &L,int n)/*绠楁硶2.11*/ {/*閫嗕綅搴(鎻掑湪琛ㄥご)杈撳叆n涓厓绱鐨勫,寤虹珛甯﹁〃澶寸粨鏋勭殑鍗曢摼绾挎ц〃L*/ int i;LinkList p; L=(LinkList)malloc(sizeof(struct LNode)); L->next=NULL;/*鍏堝缓绔嬩竴涓甯﹀ご缁撶偣鐨鍗曢摼琛*/ printf("璇疯緭鍏%d涓暟鎹甛n",n); for(i=n;i>0;-...
  • 鏁版嵁缁撴瀯鐨勯鐩!!涓嶇煡濡備綍鍋氬晩!鏁版嵁缁撴瀯楂樻墜甯府蹇,鎬
    绛旓細1)2) o(n)3) B 4)top--;6)o(logn)9)12
  • 寤虹珛涓涓嚎鎬ц〃,浠庨敭鐩樿緭鍏ユ暟鎹鍏冪礌
    绛旓細define LISTINCREMENT 10 typedef int elemtype;struct List { elemtype * list;int maxsize;int size;};//鍒濆鍖栬〃 int initlist(List L){ L.size = LIST_INIT_SIZE;L.list = (elemtype*)malloc(LIST_INIT_SIZE*sizeof(elemtype));return 0;} 鎺ヤ笅鏉ョ殑瑕佹眰鏄細寤虹珛涓涓鍚玭涓厓绱犵殑...
  • 缂栧啓绋嬪簭,寤虹珛涓涓甯︽湁鑺傜偣鐨鍗曞悜閾捐〃,杈撳叆瀛楃涓,骞舵寜浠庡皬鍒板ぇ椤哄簭缁勭粐...
    绛旓細int main(){ Link head; //閾捐〃(涓甯﹀ご鑺傜偣)int n;printf("杈撳叆閾捐〃鐨勯暱搴: ");scanf("%d",&n);printf("杩炵画杈撳叆%d涓暟鎹(浠ョ┖鏍奸殧寮): ",n);head=CreateLink(n);printf("\n鍘熸湰閾捐〃鐨勮妭鐐规槸: ");DispLink(head);LinkSort(head);printf("\n浠庡ぇ鍒板皬鎺掑簭涔嬪悗: ");DispLink(head)...
  • 寤虹珛浜屽弶鎺掑簭鏍戠殑鐩殑
    绛旓細瀹冪殑姣忎釜鑺傜偣閮鍚湁涓涓彲姣旇緝鐨勯敭浠ュ強鐩稿叧鑱旂殑鍊硷紝涓斿浜庢瘡涓妭鐐癸紝鍏跺乏瀛愭爲鐨勬墍鏈夐敭閮藉皬浜鑺傜偣鐨閿紝鑰屽彸瀛愭爲鐨勬墍鏈夐敭閮藉ぇ浜庤妭鐐圭殑閿傝繖绉嶇壒鎬т娇寰楀湪浜屽弶鎺掑簭鏍戜腑鏌ユ壘鐗瑰畾閿殑鏁堢巼闈炲父楂橈紝鏃堕棿澶嶆潅搴﹀彲浠ヨ揪鍒癘(log n)锛屽叾涓璶鏄爲涓妭鐐圭殑鏁伴噺銆傜浉姣斾箣涓嬶紝濡傛灉娌℃湁鐗瑰畾鐨勬暟鎹粨鏋勶紝瑕佸湪n涓厓绱涓...
  • 鏁版嵁缁撴瀯鏈夊摢浜
    绛旓細鏄竴绉嶇墿鐞嗗瓨鍌ㄥ崟鍏冧笂闈炶繛缁侀潪椤哄簭鐨勫瓨鍌ㄧ粨鏋,鏁版嵁鍏冪礌鐨勯昏緫椤哄簭鏄氳繃閾捐〃涓殑鎸囬拡閾炬帴娆″簭瀹炵幇鐨勩傞摼琛ㄧ敱涓绯诲垪缁撶偣(閾捐〃涓瘡涓涓厓绱绉颁负缁撶偣)缁勬垚,缁撶偣鍙互鍦ㄨ繍琛屾椂鍔ㄦ佺敓鎴愩傛瘡涓缁撶偣鍖呮嫭涓や釜閮ㄥ垎:涓涓槸瀛樺偍鏁版嵁鍏冪礌鐨勬暟鎹煙,鍙︿竴涓槸瀛樺偍涓嬩竴涓粨鐐瑰湴鍧鐨勬寚閽堝煙銆 鏍(Tree) 鏄鍖呭惈n(n>0)涓缁撶偣鐨...
  • 鎬庢牱鐢╲b瀹炵幇绾︾憻澶幆绠楁硶??
    绛旓細Node *Create(int n);//鍒涘缓鍚玭涓粨鐐圭殑寰幆閾捐〃 void Output(Node *p,int n);//杈撳嚭寰幆閾捐〃澶寸粨鐐逛负p鐨勫悗n涓粨鐐圭殑淇℃伅 Node *Move(Node *p,int n);//灏嗗ご缁撶偣鎸囬拡鍓嶇Щ鍒皀 //浠庡ご缁撶偣涓簆鐨勫惊鐜摼寮濮,鎵鐢ㄧ殑璁℃暟涓簄杩涜绾︾憻澶疄楠 void Josephus(Node *p,int n); }; Node *Node::Cr...
  • 扩展阅读:118种元素有多危险 ... 十二种元素力量 ... 十大最可怕元素 ... 18种魔法元素 ... 对于给定的n个元素 ... 全错位排列10以内 ... 元素115可以扭曲时空 ... 上古九大元素 ... 玄幻小说十七种元素 ...

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