用C或C++语言都可!急,建立顺序表与单链表,并进行定位、插入与删除操作。

[复制链接]
查看11 | 回复3 | 2008-3-27 09:30:44 | 显示全部楼层 |阅读模式
#include "stdafx.h"#include#include typedef chardatatype;typedef struct node{ datatype data; structnode*next;} listnode;typedeflistnode*linklist;listnode*p;linklist createlist( ){ charch; linklist L=(linklist)malloc(sizeof(listnode));/*附加一个头结点*/
listnode*p,*r; r=L; printf("请输入一些字符如:abcd按回车结束\n");
while((ch=getchar( ))!='\n'){p=(listnode*)malloc(sizeof(listnode));p->data=ch;r->next=p;r=p;
}
r->next=NULL;
return(L);}int insertnode(linklist L,char x,int i){ int j=0; listnode *s; p=L; while(p&&jnext;++j; } if(!p||j>i-1) {return 0; exit(1);} s=(linklist)malloc(sizeof(listnode)); s->data=x; s->next=p->next; p->next=s; return 1;}int deletelist(linklist L,int i){ int j=0;
listnode *s; p=L;
while(p&&jnext;++j; }
if(!p->next||j>i-1) { return 0; exit(1);}
s=p->next;
p->next=s->next;
free(s) ; return 1;}void Print(linklist L){ p=L->next; while(p) {printf("%c ",p->data);p=p->next; }}void main(){ int loc,flag=1; linklist L=createlist(); char j,ch; inttemp; while(flag)
{ printf("\n请选择:\n");
printf("1.显示所有元素\n");
printf("2.插入一个元素\n");
printf("3.删除一个元素\n");
printf("4.退出程序\n");
scanf(" %c",&j);
switch(j) { case '1':Print(L); break; //显示所有元素 case '2':{printf("请输入要插入的元素(一个字符)和插入位置:\n");
printf("格式:字符,位置;例如:a,2\n");
scanf(" %c,%d",&ch,&loc);//输入要插入的元素和插入的位置
temp=insertnode(L,ch,loc);
//插入
if(temp==0)printf("插入失败!\n");//插入失败
else{printf("插入成功!\n"); Print(L);} //插入成功
break;
} case '3':{printf("请输入要删除元素的位置:");
scanf("%d",&loc);
//输入要删除的元素的位置
temp=deletelist(L,loc);//删除
if(temp==1) printf("删除了一个元素"); //删除成功
else printf("该元素不存在!\n");//删除失败
Print(L);
break;
}
default:flag=0;printf("程序结束,按任意键退出!\n"); } }}
回复

使用道具 举报

千问 | 2008-3-27 09:30:44 | 显示全部楼层
单链表的#include "stdio.h"#include "malloc.h"#define null 0struct node
/*定义结构体*/{int data; struct node *next;};struct node *head;struct node *p;struct node *s;void creat()
/*创建单链表*/{int ch; head=(struct node *)malloc(sizeof(struct node)); head->next=null; p=head; printf("请输入数据: "); scanf("%d",&ch); while(ch!=-1) {s=(struct node *)malloc(sizeof(struct node));s->data=ch;s->next=null;p->next=s;p=s;printf("请输入数据: ");scanf("%d",&ch); }}void outline()
/*输出单链表*/{p=head->next; while(p!=null)
{printf("%d ",p->data);p=p->next; } printf("\n");}int locate(int x)
/*按值查找*/{p=head->next; while((p!=null)&&(p->data!=x)) p=p->next; if(p==null) return 0; else return (p->data); }int countnode()
/* 计算结点的个数*/{int i=0; p=head->next; while(p!=null) {p=p->next;i++; } return (i);}main()
/*主函数*/{int a=0; creat(); outline(); printf("请输入你要找的数:\n"); scanf("%d",&a); printf("你要找的数的下标是: %d\n",locate(a)); printf("结点个数是: %d\n",countnode());}
回复

使用道具 举报

千问 | 2008-3-27 09:30:44 | 显示全部楼层
#ifndef _LinkLIST #define _LinkLIST #define LEN 30 typedef int ELemType; typedef struct LNode {ELemType data;LNode *next; }LNode; class LinkList {LNode *head; public:LinkList();LinkList(int);LinkList(int n, int m, int mark=0);LinkList(LinkList& HL);~LinkList();void ClearList();int ListSize();bool ListEmpty();ELemType GetElem(int pos);void TraverseList(void f(ELemType &));int FindList(ELemType& item);bool UpdateList(const ELemType& item, ELemType e);void InsertList(ELemType item, int mark);bool DeleteList(ELemType& item, int mark);void pailie(int mark=1);void MergeList_L(LinkList &La, LinkList &Lb);void OrderOutputList(int mark=0); }; #endif //////////////list.cpp/////////////// #include #include "LinkList.h" using namespace std; LinkList::LinkList() {head=new LNode;head->next=NULL; } LinkList::LinkList(int dl) {head=new LNode;head->next=new LNode;head->next->data=dl;head->next->next=NULL; } LinkList::LinkList(int n, int m, int mark/* =0 */) {int i,j;ELemType a[LEN+1];for(i=1;i0&&a[j]>a[j+1]||markdata=a; p->next=q; p=p->next; } p->next=NULL; } LinkList::LinkList(LinkList& HL) {head=new LNode;head->next=NULL;LNode *p2=HL.head->next, *p1=head, *q;while(p2){ q=new LNode; q->data=p2->data; p1->next=q; p1=q; p2=p2->next;}p1->next=NULL; } LinkList::~LinkList() {LNode *p=head->next, *q;while(p){ q=p->next; free(p); p=q;} } void LinkList::ClearList() {LNode *p=head->next, *q;while(p){ q=p->next; free(p); p=q;}head->next=NULL; } int LinkList::ListSize() {LNode *p=head->next;int i=0;while(p){ i++; p=p->next;}return i; } bool LinkList::ListEmpty() { return ListSize()==0;} ELemType LinkList::GetElem(int pos) {LNode *p=head->next; int i=1; while(p) {if(i++==pos) return p->data;p=p->next; } LNode *q=head->next; return q->data; } void LinkList::TraverseList(void f(ELemType &)) {LNode *p=head->next; while(p) {f(p->data); p=p->next; }} int LinkList::FindList(ELemType &item) {LNode *p=head->next; int i=1; while(p) {if(p->data==item) return i; p=p->next; i++; } return 0; } bool LinkList::UpdateList(const ELemType& item, ELemType e) {LNode *p=head->next; bool flag=0; while(p) {if(p->data==item) {p->data=e; flag=1; } p=p->next; } return flag; } void LinkList::InsertList(ELemType item, int mark) {LNode *q=new LNode; q->data=item; if(mark==0) {q->next=head->next; head->next=q; return; } LNode *p=head; while(p->next) {p=p->next;} q->next=NULL; p->next=q; } bool LinkList::DeleteList(ELemType& item, int mark) {if(ListEmpty()||markListSize()) return 0; LNode *p=head, *q; for(int i=0;inext; item=p->next->data; q=p->next->next; free(p->next); p->next=q; return 1; } void LinkList::pailie(int mark) {ELemType a[LEN+1]; LNode *p=head->next; int k; for(k=1;p!=NULL;k++,p=p->next) a[k]=p->data; k--; for(int i=1;i0&&a[j]>a[j+1]||marka[j]) {t=a[j+1]; a[j+1]=a[j]; a[j]=t;}} p=head->next; for(int j=1;jnext) p->data=a[j]; } void LinkList::MergeList_L(LinkList &la , LinkList &lb) {LNode *pa=la.head->next, *pb=lb.head->next, *p=head; while(pa&&pb) {LNode *q=new LNode; if(pa->datadata) {q->data=pa->data; pa=pa->next; p->next=q; p=q; } else {q->data=pb->data; pb=pb->next; p->next=q; p=q; }} while(pa) {LNode *q=new LNode; q->data=pa->data; pa=pa->next; p->next=q; p=q; } while(pb) {LNode *q=new LNode; q->data=pb->data; pb=pb->next; p->next=q; p=q; } p->next=NULL; } void LinkList::OrderOutputList(int mark) {ELemType a[LEN+1]; LNode *p=head->next; int k; for(k=1;p!=NULL;k++,p=p->next) a[k]=p->data; k--; for(int i=1;i0&&a[j]>a[j+1]||marka[j]) {t=a[j+1]; a[j+1]=a[j]; a[j]=t;}} for(int j=1;j #include#include "linklist.h" using namespace std; void ff(int &a) {cout>init_size;seed=150;cout>xu;LinkList list1(init_size, seed, xu);cout>i;couti;couti;list1.DeleteList(it,i);coutolds;cout>news;list1.UpdateList(olds,news);cout>init_size;seed=120;cout>xu;LinkList list2(init_size, seed, xu);cout<<"\n单链表list2为:";list2.TraverseList(ff);LinkList list3;list1.pailie();list2.pailie();list3.MergeList_L(list1,list2);cout<<"\nlist1和list2合并之后为list3:\n";list3.TraverseList(ff);cout<<"\n这时它为空吗?(1是,0不是):"<<list3.ListEmpty();cout<<"\n长度为:"<<list3.ListSize();list3.ClearList();cout<<"\n清空单链表list3\n";cout<<"\n按回车键结束。。。";cin.get(); cin.get(); }
回复

使用道具 举报

千问 | 2008-3-27 09:30:44 | 显示全部楼层
http://zhidao.baidu.com/question/49480893.html参照这个问题,很简单的例子。有顺序表和单链表两种
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行